Python-基础-Chpater2

1.语法:if elif else
2.for :for w in words,在编辑同一个集合时,修改该集合可能很难获得正确的结果
所以通常的做法是循环遍历该集合的副本或者是创建新集合。
遍历副本的方法:for user ,starus in users.copy().items():
创建新集合的方法:active_users={} for usesr,status in users.items():

内置函数:
range():
range(5) 带一个参数时,生成从0开始的五个数:0,1,2,3,4
range(5,10) 带两个参数时,生成从5开始的十个数:5,6,7,8,9
range(0,10,3)带三个参数时,生成从0开始的十个数,步进为3:0,3,6,9
range实际不是一个列表,并没有真正的生成列表,这样是可以节约空间的。
这样的对象成为iterable。
sum():

从一个指定的范围内获得一个列表:list(range(4))

break 和continue 以及循环中的else
break用于跳出最近的for或while循环。
else 可以接在for语句后面
continue表示继续下一次迭代。

在编写方法代码时,为方法写文档注释是一个很好的做法,是一个良好的编码习惯,语法为在方法的第一行使使用""doc text""""
函数中的变量赋值都是局部变量,都存储在局部符号表中,函数中的变量的应用顺序:现在本方法的局部符号表中查找,
然后如果有嵌套的方法的话,在外层方法的局部符号表中查找,然后是全局符号表中查询,在然后是全部变量。最后是python内置的变量
全局变量和外层函数的变量不能直接在函数内部赋值。除非使用global定义的全局变量和nonlocal定义的外层函数变量

在函数被调用时,实参会被引用被调用函数的本地符号表中。
函数定义会吧函数名应用当前的符号表中。
可以把不带括号的函数名赋值给另外一个变量,然后可以通过这个变量(带括号的变量)调用这个函数

对于函数的参数:可以设置默认值(直接使用等号赋值,对于没有设置默认值的参数,是必要的参数,对于有默认值的参数是非必要参数)
使用in关键字判断是否包含某个值,和mysql中的in一样的方法。如果包含则返回true

默认值只会执行一次,对于方法是可变类型的对象(列表,字典,以及大多数类实例)时,很重要。
关于函数的参数使用,可以通过参数名赋值的方式来赋值,而不用按照参数的顺序来赋值。而如果不指定参数名,需要按照方法定义的参数的顺序来赋值,注意参数的类型。

函数的定义,可以通过/和来限制参数,确保了可读性和运行效率。
有三种方式:按位置;按位置也按关键字;按关键字。如果没有指定/和
,则参数可以按位置或关键字转递给函数
语法:def f(pos1,pos2,/,pos_or_kwd,,kwd1,kwd2)
仅限位置形参要放在/正斜杠之前,正斜杠以后可以为位置或关键字或仅限关键字。
仅限关键字要在参数类别前放置一个

关于参数名以及位置的指导建议:
1.对于形参名没有实际意义,以及当你希望强制规定调用的参数顺序。
2.当形参名有实际意义,以及显示指定形参名称可使函数定义更易理解,
3.定义api来说,使用仅限位置形参可以防止形参名称为未来可能被修改时,造成破坏性的API变动。

使用*agrs 来定义可变参数,而可变参数以后的参数,都是仅关键字参数,而不能是位置参数,因为可变参数本身的意义就是位置可变的,不限制多少个形参的,所以如果还是位置参数,就失去了可变参数的意义。

使用号,从列表或者元组中解析参数:agrs=[3,6] list(range(agrs))

使用,从字典中解析参数:d={"voltage":"four million"} 在d字典中保存的是方法parrot中需要的参数,根据形参名保存的,可以在调用方法时,把d字典传进方法:paarrot(d)
该用法就可以理解为json字符串,传入进方法,并可以解析成功。

lambda表达式

posted @ 2020-05-20 11:21  李祥洪  阅读(158)  评论(0编辑  收藏  举报