编程语言_python学习

本文详细介绍了Python的基本概念,包括数据类型、变量、流程控制、函数、列表等核心内容,并提供了丰富的实例帮助理解。

1.python缺点:速度慢和不能加密(与c语言.exe不同,有加密效果

2.命令窗口退出python环境用exit()

3.命令行模式下,可以执行python进入Python交互式环境,也可以执行python hello.py运行一个.py文件。交互式可以立即得到运行结果,但文件不 会,只能通过打印函数来输出

4.命令窗口在调用py文件时,python与matlab一样需要设定当前目录 。用dir查看当前目录文件(DIR,是directory的缩写,是目录的意思),cd c:\哪命令来切换当前目录

5.输入和输出

【1】打印是print('')。c语言是printf,其中f表示函数

【2】print('l','love','you')    连续输出,遇到逗号输出空格

【3】print('200+300',200+300)也可以计算结果

【4】输入为name=input(),其中name为变量名。但是输入的时候没有如何提示,可以name=input('please input your name')

【5】注意:输入的input()为字符串,输入58也只是‘58’字符串,可以int()转换

6.#为注释语句

7.当语句以冒号:结尾时,缩进的语句视为代码块。坚持使用4个空格的缩进。

8.数据类型和变量

【1】如果'本身也是一个字符,那就可以用""括起来。比如"I'm OK"包含的字符是I'm,空格,OK这6个字符。

注:具体的输出格式,什么空格‘’‘...’’',默认不转义r‘’,转义字符什么的回来再看

【2】布尔值,可直接输出true、false

【3】空值

【4】变量中的赋值注意,无需提前声明变量类型,想怎么赋怎么赋灵活

【5】常量,通常大写。但其实是可以改变的

【6】除法、取整、取余

9.字符编码

【1】问题的产生,不同的语言有不同的编码,这样容易混乱。故统一为unicode

【2】因为ASCII是一字节的,而unicode为二字节的。如果你的文本中文较少,那unicode会比较浪费。引出utf-8(可变长编码,根据不同的字符编

不同长度)

【3】计算机系统中通用的字符编码工作方式:内存unicode、传输utf-8

【4】python 字符串是unicode编码的,也就是说可以混着来 eg.print('包含中文str')

【5】编码与字符的相互转化函数、直接输入16进制输出字符。用到在学

【6】因python中内存为unicode编码,所以在需要传输时要转化为以字节为单位编码。实质就是str到bytes的转换

【7】由于Python源代码也是一个文本文件,所以在保存源代码时,就需要务必指定保存为UTF-8编码。系统内部自动转化为unicode存在内存中。当

Python解释器读取源代码时,内存中unicode自动转化为utf-8,为了让它按UTF-8编码读取、 匹配,我们通常在文件开头写上这两行

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

10.占位符

【1】用到再来看

11.list数据类型

【1】和数组一样引用,但有个创新点。a[-1]直接引用最后一个元素

【2】可以动态的直接追加元素到末尾a.append()。append是添加的意思,而pend悬挂词缀

【3】可以指定位置插入、删除末尾、删除指定位置

【4】list内元素的数据类型也可以不同、包括嵌套s = ['python', 'java', ['asp', 'php'], 'scheme'

12.元组tuple

【1】一旦初始化不能修改,可以引用 eg.classmates = ('Michael', 'Bob', 'Tracy') #注意是括号,而list是【】

【2】只有一个元素时,因为()的二义性即可以表示元组或运算中的小括号,故必须加逗号消除歧义

【3】可变的tuple,可以从指针角度去理解。如果tuple内有一个list,那么这个list是可变的。

13.判断条件

【1】不要忘了写冒号,代表缩进的部分是代码块。

【2】elif是else if 的缩写

14.循环

【1】将list或tuple中的每个元素迭代出来,用for x in list/tuple ,赋给x

【2】while 

【3】注意【1】的循环和你在c中见识的不一样,直接取。牛!

【4】in 后面list/tuple/str/dict均可循环

【5】若要实现和c++一样的下标迭代,Python内置的enumerate函数可以把一个list变成索引-元素对,

        这样就可以在for循环中同时迭代索引和元素本身:

        for i, value in enumerate(['A', 'B', 'C']):
              print(i, value)
        ...
       0 A
       1 B
       2 C

【6】>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
   >>> for k, v in d.items():

          print(k, '=', v)

          y = B
          x = A
          z = C

启:同时使用多了变量,如上例子中的k,v

15.dict(dictionary的简称)

【1】使用键key-值存储。d=['tom':95,'bob':48],引用d['tom']

【2】名字的含义是按照字典索引的方式存储,所以速度会特别快

【3】判断key是否存在的方法用到在看。 eg tom in d 返回bool值

【4】dict占内存极多,属于空间换时间的一种方法

【5】注意字典的引用,你总得用哈。所以请记得引用方式!{a:b,...}[a]为引用a的字典

16.set

【1】set与dict类似,也是hash存储。但只含key,没有value。

【2】s=set([1,2.3]),需要一个list或tuple作为输入集合

【3】如set名字般,不能有重复的(本质是因为hash存储所决定的)

【4】可增加减少、可交并运算

【5】集合是无序的,所以不能s[1]这样索引。

17.不可变对象

【1】一直强调,str是不可变的,a=‘tom’,实质a指向了这个空间。而list[]则不是这样,a.sort()。数组的顺序会改变

18.函数

【1】函数名与c++中的一样,代表一个函数指针,所以可以这样做。a=max a(5,-4,,2)

【2】定义函数用def

【3】没有return,执行完毕也会返回,返回none。return none 简写为none

【4】将函数存为.py文件,from 文件名 import 函数

【5】空函数 ,用来占位的作用。(先让程序运转起来,用占位来避免语法错误)

def nop():
    pass

【6】抛出错误,raise TypeError('bad operand type')。可作为异常处理

【7】可返回多值,return x,y。但其实是假象。实质返回了一个tuple

19.函数的参数

【1】位置参数,就是你所理解的普通参数

【2】默认参数的作用,有些参数默认就不用一直输入了,比如研一的年龄为24岁

【3】但是要注意默认参数不能是可变量list,理由是在创建函数时,默认参数也被分配内存并建立(不然如何虚实结合)

如果在函数体内list发生改变,也就是默认参数发生改变。那就完了

【4】可变参数作用:当参数是list时,为了省略括号,可直接将list内部元素输入,于是成了可变参数

方式:参数面前加个* 在调用参数是自动转化为tuple函数

如果有时候list已经写好了,那么咋整?加*后成为可变参数,list直接输入不对呀。

【5】可采用*list方法,将list内元素变为参数一个一个传递,在任何函数都适用

20.关键字参数

【1】理解关键字,关键字参数在函数内部自动组装为一个dict,以关键字=值输入

【2】也可以和函数可变参数一样,dict已经写好,用**引用

【3】作用:简单的注册功能,用户名和姓名必填,而其他事选填,函数中有关键字参数就能满足这样的要求

21.命名关键字参数

【1】要限制关键字参数的名字,就可以用命名关键字参数

【2】具体方式:在位置参数和命名关键字参数之间加个*,以供编译器识别位置参数和命名关键字参数,def person(name, age, *, city, job):。

【3】如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:def person(name, age, *args, city, job):

【4】调用时必须指明 key=值,这样关键字参数就可以和可变参数区分开来

【5】命名关键字参数的输出,key值会省略

22.

【1】使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

【2】命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。

23.递归

【1】有一句废话:递归的原理是栈,但栈会满的,理论上可用尾递归来优化,但是没有人去做

24.切片

【1】在list后加入一个数字,l.append(n)

【2】切片:a[0:3] //注意与matlab不同,起始为0,直到索引3,但不包括3.

【3】倒切片

【4】倒切片0可以省略

【5】a[:10:2],前十个数每两个取一个

【6】字符串和tuple也可以进行切片操作

25.列表生成式

【1】>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

【2】>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

【3】 [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

26.生成器

【1】列表中的元素可以根据某种算法推算出来,很省内存呀。创建一个generator.,实质内部保存的是算法。

【2】因为在列表生成时,是按照某种规律生成的,可以直接由列表生成式改进
g=( x*x for x in range(10))
在写完这行代码后,输出g,不会输出g的元素,仅仅会告知g是生成器
【3】如何引用generator内元素呢?方法一:next(g)
【4】方法二:用for x in 循环

【5】方法三:如果推算的算法比较复杂,还可以用函数来实现:将print(b)改为yield b 

                       o=odd()  #首先生成generator对象o

          方法三的具体执行过程是执行过程遇到yield 就中断,下一次接着执行

27.迭代器

【1】总结一下可以用于for循环的数据类型,比如list/tuple/dict/set/str等称为Iterable。理解为可迭代的意思

【2】而iterator 为迭代器的意思。是可以由next()展开来到数据结构。

28.map函数

【1】有两个参数,一个是函数,另一个是数组,会得到一个数组。这个结果数组是由参数数组依次输入函数得到的

【2】注意不只是你自己定义的函数,还可以是内置的函数,比如str函数。

29.reduce函数

【1】reduce(f,[x1,x2,x3]),也是和map函数一样,list作用于函数f,但是不同的是在reduce中的f必须有两个参数,会产生这样的效果:

         reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

30.filter函数

【1】filter()函数于上文一样也是作用于数组,但是不同的是filter(拼音:非爱捞他)过滤的意思,他能根据返回值确定list内元素的去或留

【2】filter返回的是iterator,即生成器

31.and or

【1】and or 其实是逻辑运算,0 and 1 ,碰到0,因为是and运算一个假为假,返回0.

32.

【1】g=lambda x:x+1    定义了个函数体,x为入口,x+1为函数体

n.问题

【1】执行a = 'ABC',解释器创建了字符串'ABC'和变量a,并把a指向'ABC',这里指向是指针的意思吗?那我们将b=a,删除a,b还会有值么?

【2】a, b = b, a + b 相当于 t=(b,a+b)# t is a tuple ;a=t[0] b=t[1]????


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值