形参和实参
不可变对象值传递,所以不影响x,y
可变对象地址传递,所以会直接处理原地址对应的内存,一边做修改,另一边也会被修改,因为两边对应的是同一块内存 (可变对象与不可变对象其它语言也会有类似的,c没有,c直接传的是指针,速度更快)
必需参数须以正确的顺序传入函数。调用时的数量必须和声明时一样(必需参数对于所有的语言都有,只要有函数就会有)
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。(关键字参数对于所有的三代语言(即面向对象的语言,c++,python,java等)都有)
在定义函数时,给函数的参数一个默认值,调用函数时,如果没有传递参数,则会使用默认参数。
要求带有默认值的参数放在所有参数的后面(所有语言都是这样要求的)
def shu(a,b,c,d=1):
如果需要一个函数处理比当初声明时更多的参数。这些参数叫做不定长参数,不定长参数没有值,和上述的参数不同,声明时不会命名, print( )就是一个不定长参数
加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组(元组即说明这是一个序列,序列即说明可以进行for循环遍历)。我们也可以不向函数传递未命名的变量。
(18条消息) 关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解_测试不将就-CSDN博客_lambda
lambda argument_list: expression
sum=lambda x: print(x) sum(100) #输出是100
注:部分Python内置函数接收lamda函数作为参数。
return[表达式]语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的retrun语句返回None。
- jisuan函数没有返回值return,所以print(jisuan)出来是None
- Python元组只要有一个元素时,后面要加逗号','
- return可以返回多个值
- return返回的多个值以元组形式输出
- return返回的数据类型可以是不同类型
(18条消息) [Python小记] 通俗的理解闭包 闭包能帮我们做什么?_Rei的博客-CSDN博客_python 闭包
python的作用域一共有4种,分别是:
以L E G B的规则查找,即:在局部找不到,便去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找 绝不允许按照BGEL查找
???在某个范围内,就可以对某个范围进行直接访问,绝不允许跨区域向外访问,不允许不可变类型由外向内访问(只能将外部变量对于内部变量进行值赋值,相当于新建了一块内存,两者之间互不相关)允许可变类型由外向内访问(相当于内部变量在本地声明了一个标识符,标识符不在本地用内存,标识符指向了外部的内存)
Python中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了(对于的是不可变类型 可变类型不需要)
global 是全局标识符,是当前嵌套的根
如果要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量则需要nonlocal关键字
关于zip( )函数:可以将两个列表组合成一个字典