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
,空格,O
,K
这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]????