python笔记,,positional


positional argument:位置参数


day01

python中():

没有封号’;’,而用回车符来代替,所以一句话结束后开始另一句话必须回车

也没有大括号{},而使用tab来表明在方法内,而没有tab则表示方法结束

而冒号’:’主要是为了像if a<3 : a=2这种就不会出现混乱

def定义方法

变量

不需要定义类型,必须要初始化即赋值;没有字符型char,被并到字符串类型中了

动态类型:在运行期间确定变量的类型,python确定一个变量的类型是在第一次给他赋值的时候;

强类型:有强制的类型定义,一个整数,除非显示的类型转换,否则绝不能将它当作一个字符串

变量赋值,可以同时多个,如a,b = 2,3;c,d = a,b

单行注释#,多行注释’’’… …’’’或”””… …”””

字符串,单引号’’和双引号””是等同的,可以进行’+’操作和’*’操作;单行保留格式r’……’,多行’’’……’’’(和注释符号一样)

使用 j 或 J 后缀,可以赋值虚数,但j/J前必须有实数,如2+1j,而不能写成2+j;这样可以和变量j进行区分

列表的长度可变,可存储各类型变量/常量,可用append()改变自身;也可通过’+’与其他列表组合形成新的列表

切片[a:b]是一个很便捷的工具,左右切片位置可以是变量,但a必须小于b,否则为空[]。

切片位置技术分享图片

range

range(start, stop, step)返回的是range对象,list(range(5)),则返回[0,1,2,3,4];list(range(1, 4)),返回[1,2,3];

list(range(1,5,2))返回[1,3]

break是结束整个循环体,continue是结束单次循环

形参(位置参数a,默认参数b=1)

形参中的默认值,def abc(a,b=4,c=[]),其中b,c即为默认值参数,所以实参中可这样,abc(5)而让b,c默认

形参中有位置参数a,与默认参数b=3,默认参数必须在后,即abc(a,b=3),而不能相反

注意:默认值只初始化一次,当默认值是一个可变对象(如列表,字典或大多数类的实例)时,方法执行完后不会释放

def f(a,b=[]): L.append(a) return L,调用f((1),f(2))后,分别输出[1],[1,2]

形参可接收元组和字典,一个星(*):表示接收的参数作为元组来处理;两个星(**):表示接收的参数作为字典来处理

不过元组会把后面的参数当成元组元素,所以要用关键参数来传值;而字典会把关键参数当成字典元素,

而关键参数又不能放在位置元素(也即字典参数)前,而直接传又会出错,不清楚为什么,所以暂时没有解决办法;

实参(关键参数b=3)

实参不可以定义变量,如abc(i=5),但可以关键字参数,即字母一致必须是abc(a=5),这里的a=5是参数而非定义

实参中的关键字参数顺序不重要,即可以abc(b=1,a=2)

解包参数列表,即在元组或字典变量前加*或**完成解包,如d=[3,4,5],abc(*d)就可分别把值传到abc(a,b,c)中了


day02


iterable:可迭代的对象,如list,tuple,dict,str,都是iterable(凡是可以for循环的,都是Iterable)

元组,长度和每个元素不能改变,且为圆括号或不用括号,tuple1=(1,2),tuple2=1,2 一个元素时后面要加逗号,(‘a’,)

集合

没有顺序且不可重复,可用set(iterable)方法-返回集合,或大括号定义,但大括号定义时不能为空,因为{}为字典

可进行逻辑运算& | ^

字典

初始化:a = {‘key1’:value1},添加:a[‘key2’]=value2;也可用dict()方法或列表推导式构建字典;

索引指的是根据键而不是位置,键可以是不可变的类型,数字、字符串、不包含可变类型的元组可作为键

keys()方法返回dict_keys类型(iterable,非list,不能索引)而不是列表,需要用list(dict1.keys())后才可以索引;

键:for a in dict.keys():,值:for a in dict.values():,键-值:for a,b in dict.items():,整体:for a in items():

pop(key1)弹出key1所对应的元素;popitem()弹出最后一个元素,为字典独有

列表

添加:append(x),x是常数;extend(a),a是列表;insert(i, c),i是位置,c可以是常数也可以是列表

删除:remove(x),x是常数且必须存在于要移除列表中;pop(i),移除i 位置上的数且返回i 位置上的数

del list1[i1:i2],根据索引删除,i1和i2是索引;clear()清空列表

index(x),返回第一是x的索引;独有sort()方法

lambda关键字创建小的匿名函数,被局限于只能有一个单独的表达式,返回两个参数的总和: c = lambda a, b: a+b

map方法

map(func, iterable,iterable,……),func为方法,后面至少一个iterable,而iterable的数量和顺序必须与func形参一致

返回值为:传进func的各iterable值计算后的结果,可用list()将这些值保存起来,list(map(func, iterable,iterable,……))

列表推导式-List Comprehensions

与lis(map(func,iterable,…))类似,形如:[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

规则:由一对方括号组成,方括号包含一个表达式,其后跟随一个for子句,然后是零个或多个for或if子句

列表推导式的嵌套,[[row[i] for row in [[1,2],[3,4]]] for i in range(2)],结果为[[1,3],[2,4]]

zip()方法,zip([iterable, ...]),将iterable压缩成元组,可以看作是把列转换为行,解压缩zip(*zip())就是在转一次行列

enumerate方法,list(enumerate(iterable, start)),结果如:[(0,’ab’),(1,’bc’),(2,’ef’)]

比较:

in/not in,is/is not;比较操作符优先级小于算数操作符

级联比较,a < b == c测试a是否小于b并且b是否等于c;and/or/not,逻辑优先级小于比较操作符,且not>and>or

sort()方法仅用在list上,对原有list进行修改,而sorted(iterable)是对所有可迭代的对象,返回新的iterable对象


day03


方法

方法的本质上是对象,可以用变量对其引用,def abc():,a=abc,这样a()与abc()就是等同的,注意与a=abc()的区别

在方法中也可以定义方法,即方法可嵌套,但外部无法直接调用嵌套中的方法

嵌套方法的使用:①仅在主方法内部使用,在方法内部获得/使用嵌套方法的计算结果

②外部使用,先‘return 嵌套方法’,然后a=abc()调用主方法赋值给变量,即可完成在外部调用嵌套方法a(),毋忘加括号

拼接

+,仅限于相同类型,如同为字符串/元组/列表,但不能是字典/集合;

要想输出字符串+列表,必须把列表转换成字符串,如print(‘the list is:’+str([3,4,5,]))

input(‘提示信息’),用户输入

模块-module

导入模块,import module1,调用方法必须加模块名,module.func1

从模块中导入方法或变量,from module1 import func1/var1,调用时可直接用func1/var1而不用加模块名

from xx import xx形式,变量会被加入到当前的命名空间中,所以可能导致覆盖情况发生,故不推荐使用

使用as来避免重名,import module1 as md1,from mod import func/var as f/v

包-package,包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境

namespace命名空间,四个:Locals-函数内部,Enclosing-外面一层函数,Globals运行的全局变量,Builtin内置模块空间

LEGB,程序引用某个变量的名字时,就会从名字空间开始搜索,搜索顺序规则便是:LEGB,一层层查找,找到后便停止搜索

装饰器,使得方法变得可扩展,如对方法增加功能等

__name__,它的值由Python解释器设定:

如果脚本文件是作为主程序调用,其值就设为__main__,如果是作为模块被其他文件导入,它的值就是其文件名

locals(),返回局部变量所构成的字典;globals(),返回全局变量所构成的字典

vars(object),返回对象的属性和属性值的字典,没有参数时与locals()方法一致

reduce(function,iterable)方法,根据给定方法对迭代器中元素进行计算


day04


定义类,”class Car(FatherClass1,FatherClass2): “,类名不一定要大写,但建议用大写

继承,FatherClass为父类,可以多继承,即传入多个父类对象

类的实例化,car1=Car(),

类中有特殊方法__init__(self,a,b),在实例化时便会自动调用,其中self便是实例化本身,即car1

self是不用传入的,只需传入a,b即可,self可以用其他名字如me

注意:类的属性为可变对象(如列表,字典和大多数其他类型),只会初始化一次,即类的所有实例共享这一变量

(这与形参的默认值问题类似),当为不可变的基本类型(数字,字符串,元组),不存在这种问题

要避免这种问题,可将其放入__init__()方法中,即self.a=b,b接收的为可变对象,如[1,2,3]

python笔记

评论关闭