1.变量命名规则:
1). 区分大小写
2). 首字符为字母或下划线
3). 其他可以为字母 数字 下划线
python变量不需要定义类型,解释器会自适应类型, 主要类型:int , float, string , bool
4). 赋值方法 str = '%s : %s:%d' % ('hello', 'world', 1234)
str = '%s: %s' % ("hello", "world")
5). type获取变量的类型;
6) 变量名前加上global将变量声明为全局变量, 函数体外默认global,函数体内默认innerl;
2. 输入
input()
3. 输出
(1). print("name:%s %s" % (name,name2))
(2) 结合format和print输出,print('{0} is {1}'.format(name,str)),或者不添加数字print('{} is {}'.format(name,str))或者指定输出print('{name} is {str}'.format(name="name",str="str"))
(3) print('{0:_^11}'.format('hello')),^表示居中,<左对齐输出,>右对齐输出
(4) print('{0:.3f}'.format(1.0/3))
4. 随机数
from random input randint
ranint(a,b)生成a,b之间的随机数(包括a,b)
5. while函数
while 结束条件:
循环体;
6. for循环:(range取值范围[a,b))
for i in range(a,b):
循环体;
7. 字符串:
(1). 基本格式:
用''或者“”效果一样,若要在''中使用'要加转置符号,或者用“’”, 反之亦如此;或者使用''' '''初始化字符串,字串内'和"随便使用,但要对称使用;
'He said, \"I\'m yours!\"'
(2) .字符串拼接 print(str1 + str2)
(3). 字符串拼接数字 print(str + str(num)) 或者 print('str is %d', num) 或者 print('str is %d' % num)
(4). print(f'str is {str}'), f意为规定输出格式;
(5). 字符串切割:切割后得到一个列表list
str.split()默认切割空白字符
str.split('.')指定.为分割符
(6). 字符串每个字符访问: for c in str: print(c) 或者 通过索引的方式访问str[-1];
(7). 字符串的单独字符不能手动修改;
(8). 切片访问, 截取字符串, 类似于list的方式, str[a,b], 不包括b索引的字符
(9). 连接字符, 在字符串的每俩字符间插入指定分隔符, ','.join(dtr)
(10)在语句的末尾添加\表示下一行继续,两行并一行;
8. 强制类型转换
int() float() str() bool()
bool(parameter)只有参数为0、None、空字符串、[]、{}、()为False,其他都为True
9. 定义函数
def func(parameter):
函数体;
return ;
(1). 当想定义默认参数时,def func(parameter = 'hello'), 当调用函数时没有传入参数时,使用默认的参数; 若有多个参数, 则有默认值的参数应放在参数列末尾,否则会编译报错;
(2) 参数想要设置为任意数量参数时,如def func(*para), para是元组类型(数据原型不可改动, 有序)
(3) 参数以键值对(dict)形式传入,无序,def func(**para), 访问时for k in para: print(k:para[k]);
(4) 混合使用时,无默认参数放在最前面,有默认参数的放在第二, 元组类型放在第三, 字典类型放在最后,例如def printf(x, y=10, *arg, **args):
10. if语句
与C语言中的类似, if: elif: else:
11. 列表list
(1). 可以自定义初始化, 列表元素类型不需要相同
(2). 元素访问, 类似C语言数组下标的形式, 第一个元素list[0], 最后一个元素list[-1]
(3). 元素修改, list[0] = 新值
(4). 元素添加, list.append(parameter)
(5). 元素删除, del list[0]
(6). 元素随机访问, 引入包from random import choice, 随机访问: choice(list)
(7). 切片, list[a:b], 获取a到b之间的元素, 不包括b,包括a
当a没有值,默认0; 当b没有值, 截取到最后; 都没值, 全部list值;
(8). list连接,使用str作为分隔符, str.join(list)
(9). 列表解析, 即在列表初始化的时候根据已有的列表生成新的列表,如:
list1 = [1, 10, 80], list2 = [i / 2 for i in list2 if i % 2 == 0]
12. 读取文件
f = open('data')
str = f.read()
f.close()
注: read读取全部数据, readline读取一行, readlines读取所有行存储到list中,每一行为一个元素;
13. 写入文件
f = open('data', 'w') //a
f.write('data') //writelines写入指定list
f.close()
open默认为只写模式, 写入会出错, 设置w时,写入会覆盖原文件;设置a时,在文件尾添加文件;
14. break continue
与C语言的用法完全一致
15. 异常处理
try: ... except: ...
要执行的动作放在try后面, 发生异常时的错误放在except中
16. 字典
类似键值对,键唯一, 只能为简单的变量类型,不能为list
(1). 键值对无序;
(2). 通过dic[key]或者 dic.get(key)的方式访问
(3). 增加一个dic[key] = ...
(4). 删除del dic[key]
(5). for name in dic: print dic[name]
(6). 新建字典的话, 用dic = {}
17. 引用python库
(1). from math import pi as math_pi(as防止同名冲突)
(2). import ramdom ----- print(dir(random))查看指定库的所有函数;
random.randint(1,100)产生随机数, 包括1和100;
random.random()产生0到1.0的随机浮点数,不包括1.0;
random.uniform(a,b)生成a到b间的随机浮点数, a和b不必一定为整数;
random.choice(序列)返回序列的任意一个元素,序列可以为字符串、list、元组;
random.randrange(start,stop,step)生成start到stop之间间隔为step的随机一个元素, 默认start为0, 默认step为1, 需要指定stop;
random.sample(序列,k) 在序列中随机选k的元素,返回新的队列, 元组不能更改不能调用;
(3). urllib库 --- 网络连接库, import urllib.request, Request函数访问链接, urlopen获取返回值, read函数读取返回json;
json --- json文件处理库, json.loads()函数把json字符串转换成字典类型
math库 ----import math, math.pi(圆周率), math.e(自然对数, 2.7), ceil向上取整, floor向下取整, pow指数运算, log对数函数, sqrt平方根, fabs绝对值函数,三角函数sin等
time模块 ---import time, time.time()获取当前时间, time.sleep(sec)程序休眠sec秒的时间;
pickle模块 ---impore pickle 用来规范式读写文件, py3需要使用open(file, 'wb'/‘rb’)打开文件, pickle.dump(data, f, True)写文件, pickle.load(f)读取文件
18. 类和对象
类似C++中的类和对象
1. 成员变量和函数称为类的属性;
2. 函数的默认参数为self, 指向此对象实体;
3. 创建对象时, test = Test(), 类似C++的类构造函数;
4. 子类可以继承父类的属性,class test2(Test):, test2类继承Test类的属性
5. 类的默认初始函数为__init__(), 可以自定义参数(第一个为self),创建对象时调用初始化函数;子类调用父类属性时直接用父类名调用, 如Test.__init__
19 . and or使用
类似于C语言的三元运算符true?a:b
用法: bool值 and a or b, 当bool值为true时,结果为a,否则为b; 但是当a为0或者""的0值时,这个结果不再成立;为了解决这个问题,可以把结果放到list里,这样写: (bool值 and [a] or [b])[0]
20. 元组序列
增删查改的操作类似于list, 元素创建后不能再修改
函数返回值、print打印时都会用到元组, def getNum(n): return (n, n+1)
21. 正则表达式
(1). 引入库import re
(2). r字符, raw, 表示不对字符串进行转义, 表示把字符串中的转义符当转义符,不需要再加\;
(3). []匹配括号中任意的字符, [1234567890]或者\d匹配数字; [^a]表示取反, 匹配不是a的字符;
(5). '.'字符匹配除换行符外的任何字符;'\S'匹配不是空白符的任意字符;
(6). '.*'表示匹配任意次*(包括0)前面的字符, 会尽可能匹配最长的字符串,称为贪婪匹配; '.*?'称为懒惰匹配, 匹配到第一个符合条件的字符串; '+'与'*'类似,不过匹配个数>=1; ?重复零次或一次;
{n,}表示重复次数大于等于n次; {n,m}表示重复n到m次;
(7). 匹配限定长度的字串,用{11}
(8). \w匹配字母、数字、下划线、汉字; \s匹配任意空白符; ^匹配开头; $匹配结尾;
上述对应的大写字母,分别表示取反的意思, 例如\S只匹配任意不是空白符的字符;
22. lambda语句, 有点像是C中的宏定义,lmbda在一定条件下可以替换def 函数的形式,参数列表没有符号,没有return语句,无法调用print这样的语句,可以理解为lambda创建了一个对象并返回给一个变量使用,如:sum = lambda a,b,c : a+b+c, sum(1,2,3)
23.map函数,zip函数, map函数有两个参数,参数1为处理函数,参数2为传入的参数,如list = map(func, list1),list1中的每一项会作为参数传入func,返回的list需要用list()强制转换下,其中func就可以用到上面的lambda函数了,如果把两个list进行数学运算,若对象不一样长,会截取最短的那个进行运算; zip函数把两个list或者元组合并到一个中,也是截取其中最短的那个进行运算;
24.多线程,引入_thread模块,调用start_new_thread(func,args,kwargs), 其中args为元组参数,kwargs为可选字典参数, threading模块可以使用lock锁相关的操作,acquire和release分别表示申请和释放锁,func执行结束后进程会自动结束,需要保证程序在函数执行完之前没跑完,如程序尾加上一个while(1)