一. 列表list,用方括号括起来[] 二. 元组truple,用圆括号括起来()
- list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们。
- 如果元组只有一个元素,不能用(‘a’)来定义,要加逗号(‘a’,),因为用(‘a’)的话,圆括号可以代表运算
- List是不可变的,表示里面的数字,字符串,boolean,null以及对象的指向不可变。但是对象的指向的内容是可变的。且没有append()和insert()方法
三. 条件判断
- if x: print(“True”) 只要x为非空字符串,非零数字,非空list等就判断为true
- input方法:命令窗输入的任何内容都是str类型,可以用内置函数int()来转换
四. 循环:对于需要遍历的对象包括列表list,元组truple,字符串str?,range类型数字序列,集合set,字典dict
- for x in Y:
- range类型转换为列表list,list(range()) 五. 字典dict(大括号括起来的键值对,{}),无下标,不能使用切片 例子d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
- 增加元素 d['Adam'] = 67
- 删除元素 1) 先判断是否有这个key ① 'Thomas' in d ② d.get(‘Thomas’)返回None,但是交互界面不显示 ③ d.get(‘Thomas’,-1)返回-1,则表示没有这个key 2) 然后用字典的pop(key)方法,d.pop(‘Bob),或则用内置函数del d[‘Bob’]
- 修改:d[‘Bob’]=11,直接赋值就行
- 查找:d[key]
- 字典是无序的,查询速度快,key是唯一的且不可变,经常用字符串来代表key
- 空字典alien_0={}
- 遍历键值对
- 可临时排序内置函数sorted()方法,只是对key临时排序,不管value,是可迭代的
- items()方法 a={'b':'xiao','a':'lei'} b=a.items() print(b) print(b.class) print(isinstance(b,list)) print(isinstance(b,tuple)) for i in b: print(i) print(type(i)) c=tuple(b) print(c) sorted(b) for name in sorted(b): print(name)
1) 返回的是一个dict_item类型,不是元组也不是列表dict_items([('a', 'xiao'), ('b', 'lei')]) 是可迭代的iterable,可使用内置函数sorted临时排序,各元组之间排序 1) dict_item类的每一个元素都是元组类型('a', 'xiao')和('b', 'lei') 2) 可将dict_item类变成list列表list(b) 即[('a', 'xiao'), ('b', 'lei')]和turple元组turple(b) 即(('a', 'xiao'), ('b', 'lei')) 转变成的list和turple的每个元素都是元组类型 3) 遍历键值对for key,value in a.items(): 10. keys()方法 a={'a':'xiao','b':'lei'} b=a.keys() print(b) print(b.class) print(isinstance(b,list)) print(isinstance(b,tuple)) for i in b: print(i) print(type(i)) c=tuple(b) print(c) d=list(b) print(d) sorted(b) for name in sorted(b): print(name)
2) 返回的是一个dict_keys类型,不是元组也不是列表dict_keys(['a', 'b']),是可迭代的iterable,可使用内置函数sorted临时排序,各字符串之间排序 3) dict_keys类的每一个元素都是字符串类型 4) 可将dict_keys类变成list列表list(b) 即['a', 'b']和turple元组turple(b) 即('a', 'b') 转变成的list和turple的每个元素都是字符串类型 5) 遍历键for name in sorted(a.keys): Print(name) 6) 11. values()方法 a={'b':'xiao','c':'lei','a':'li'} b=a.values() print(b) print(b.class) print(isinstance(b,list)) print(isinstance(b,tuple)) for i in b: print(i) print(type(i)) c=tuple(b) print(c) sorted(b) print(sorted(b)) for name in sorted(b): print(name)
1) 返回的是一个dict_values类型,不是元组也不是列表dict_values(['xiao', 'lei', 'li']),是可迭代的iterable,可使用内置函数sorted临时排序,各字符串之间排序. 2) dict_keys类的每一个元素都是字符串类型 3) 可将dict_keys类变成list列表list(b) 即['a', 'b']和turple元组turple(b) 即('a', 'b') 转变成的list和turple的每个元素都是字符串类型 4) 遍历值for name in sorted(a.values): Print(name.title())//因为是每个元素是字符串类型
六. 集合set:无序的无重复元素的集合,用大括号,无下标,不能使用切片,每次顺序都不一样 例子s={‘a’,’b’,’c’} 1.将list转换成set,且去掉重复的元素 S=set(可迭代类型),一个空集合set(),用圆括号,不用方阔号{} 3. 增加key 1)s.add(key) 2)s.update(x):x可以是元素、列表、元组、字典(取的字典的key)、集合
- 删除key s.remove(key)
- 修改key,通过增加和删除来进行修改
- 查找key,没办法查找,可以用in
七. 函数
- 内置函数:见python标准库https://docs.python.org/zh-cn/3/library/ 1) sorted()方法,返回的是一个list,零时排序 2) set()方法,返回的是一个集合set,参数是可迭代类型,包括字符串、列表、元组、字典(迭代字典的时候默认的是keys集合)
- 定义函数: 1) 注释:三对双引号括起来,可以生成函数的文档注释
- 空函数:相当于占位符,没想好怎么写,可以让代码先运行起来 def nop(): pass
- 函数可以返回多个值,其实返回的是一个truple
- 参数: 1) 位置参数:按顺序赋值 def describe_pet(animal_type,pet_name): “””显示宠物的信息””” Print(“\nI hava a ”+animal_type+”.”) Print(pet_name) def describe_pet(‘harry’,’hamster’)实参 2) 关键字参数:def describe_pet(pet_name=’hamster’,animal_type=’harry’)调用的时候,实参可以不按顺序来赋值,但是调用的时候每个实参必须赋值,键值对 3) 默认参数:定义的时候,形参默认参数 def describe_pet(animal_type,pet_name=’dog’): ‘””显示宠物的信息””” Print(animal_type) Print(pet_name) ① 必选参数在前,默认参数在后。 ② 调用的时候,可以按位置参数顺序赋值,可以对默认参数赋值(更新的值),也可以不对默认参数赋值(默认的值) ③ 调用的时候,可以按关键字参数赋值,调用的时候需要对每个非默认参数赋值,如果要更新默认参数,要对默认参数进行关键字参数赋值 ④ 默认参数必须放在必选参数的后面 ⑤ 默认参数为空字符串时,可用于灵活判断。 3) 传递任意数量的实参:形参前面带号 def test(toppings): print(toppings) test('mu','geree','extra') ① 形参toppings中的号让Python创建一个名为toppings的空元组,相当于参数是个元组,还可以和位置参数混合使用def test(a,*toppings)
4) 传递任意数量的关键字实参:形参前面带两个星号 def build_profile(first,last,user_info): """创建一个字典,其中包含我们知道的有关用户的一切""" profile={} profile['first_name'] = first profile['last_name'] = last for key,value in user_info.items(): profile[key]=value return profile user_profile =build_profile('albert','einstein',location='princeton',field='physics') print(user_profile) ① 形参user_info中的号让python创建一个名为user_info的空字典,相当于参数是个字典,可以和位置参数混合使用
5) 6. 7. 八. 切片L[0:3],元组、列表、字符串可以使用切片。字典和集合不能使用 九. 可迭代的对象:判断是否可迭代 from collections import Iterable print(isinstance({'a':'xiao','b':'lei'}.items(),Iterable)) 十. While循环
- 与for循环的区别:while后面一般用于循环判断是否为空,只要x是非零数值、非空字符串、非空list,非空set,非空dict字典,就判断为True,否则为False。
十一. 不可变类型:数字、字符串、元组 十二. 模块
-
模块是扩展名为.py的文件,是文件
-
导入整个模块import test,不需要添加扩展名,可以使用test.py文件中所有的函数。调用模块中的函数的时候就可以使用模块名.函数名()来调用具体的一个函数
-
导入模块test.py中指定的函数,不是所有的函数 from 模块名(不要后缀) import 函数名。调用的时候直接使用函数名()来调用,不用写模块名。
-
导入的时候可以用as来给模块名和函数名取别名 十三. 生成器generator
-
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
-
g = (x * x for x in range(10))
-
生成器也是可迭代的对象,所以可以循环遍历for n in g:print(n)
-
Yield关键字,任何一个带有yield关键字的函数都是一个生成器, 十四. 面向对象编程
-
创建类 class Dog(): """一次模拟小狗的简单测试""" def init(self,name,age): """初始化属性name和age""" self.name=name self.age=age def sit(self): """模拟小狗被命令时蹲下""" print(self.name.title()+" in now sitting") def roll_over(self): """模拟小狗被命令时打滚""" print(self.name.title())+" rolled over!" my_dog=Dog(name='xiaolei',age=6) my_dog.sit()
1) 关键字class 2) 类名首字母大写,不使用下划线,使用驼峰法 3) init__方法是构造函数初始的方法,一定会有,如果没有重新定义的话,会自动添加 4) self与java里面的this差不多,表示当前实例对象 2. 实例化 3. 添加属性在__init()方法里面添加,self.属性名=参数,也可以在类中定义,类中的每个属性必须都初始值 4. 调用方法 5. 私有属性,self.__name=name,不能被外部访问到 6. 继承 1) 如果写构造方法__init(),一定要调用父类的构造方法,先初始化父类的构造方法,再初始化本类的特有属性 super().init() 2) 多态:对扩展开放,可以随意新增Animal子类。对修改封闭,不需要修改依赖Animal类型的run_twice(animal)等函数。调用的时候,只需要传入具体的子类实例就行。 class Animal(): def run(self): print("Animal is running") def run_twice(animal): animal.run() animal.run() class Dog(Animal): def run(self): print("Dog is running") def eat(self): print("Eating meat") run_twice(Dog())
3) 4) 7. 导入类 1) 将类写在模块中 2) 导入单个类,from 模块名(不要后缀) import 类名,与导入单个函数一样。然后跟函数一样调用 3) 导入所有类,import 模块名(不要后缀),与导入整个模块一样。然后跟函数一样调用,因为也是构造方法。只不过返回的是个对象,且对象里面还有很多方法可供使用。 import car my_beetle=car.Car('volkswageen','beetle',2016) print(my_beetle.get_descriptive_name())
十五. 文件读写 1. 文件路径 1) 相对路径,当前代码运行下的那个路径 2) 绝对路径,在windows系统或者linux系统中的文件路径 2. 读文件 1) 用with关键字,表示不再需要访问文件后将其关闭,关闭IO流。 2) With open()函数,第一个参数是要打开的文件名,第二个参数是读取模式(只读r,r+又读又写,w只写,w) 3) open()函数,返回的是这种有个read()方法的对象,再python中统称为file-like object 文件类对象。 4) read()函数,会一次性读取文件的所有的内容,如果文件有10个G,内存就爆了,适合小文件,所以大文件推荐使用read(size) 5) readline()函数,每一次读一行,占内存小,适合大文件,需要用while循环 f = open('test.py', 'r') line = f.readline() while line: print(line, end="") line = f.readline() f.close() 6) readlines()函数,readlines()方法读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存,用for循环 f = open("a.txt") lines = f.readlines() print(type(lines)) for line in lines: print line, f.close() 3. 写文件 1) 读文件mode=’r’,是默认的 2) 写文件mode=’w’,是写入,会覆盖。 3) 附加到文件mode=’a’ 4. 十六. 装饰器
- 我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
- 如何编写
- def log(func): def wrapper(*args, **kw): print('call %s():' % func.name) return func(*args, **kw) return wrapper @log def now(): print("2015-3-15") f = now f()