python传入函数 python函数结果传给变量( 二 )


默认参数的函数定义
上面示例第一个是正确的定义位置参数的方式,第二个是错误的,因为位置参数在前,默认参数在后
def add1(x=1,y) 的定义会抛出如下异常
默认参数的函数调用
注意:定义默认参数默认参数最好不要定义为可变对象,容易掉坑
不可变对象:该对象所指向的内存中的值不能被改变,int,string,float,tuple
可变对象,该对象所指向的内存中的值可以被改变 , dict,list
这里只要理解一下这个概念就行或者自行百度,后续会写相关的专题文章讲解
举一个简单示例
4.可变参数区别:定义函数时,有时候我们不确定调用的时候会多少个参数,j就可以使用可变参数
可变参数主要有两类:
*args: (positional argument) 允许任意数量的可选位置参数(参数),将被分配给一个元组, 参数名前带* , args只是约定俗成的变量名,可以替换其他名称
**kwargs:(keyword argument) 允许任意数量的可选关键字参数,,将被分配给一个字典,参数名前带** , kwargs只是约定俗成的变量名 , 可以替换其他名称
*args 的用法
args 是用来传递一个非键值对的可变数量的参数列表给函数
语法是使用 符号的数量可变的参数; 按照惯例,通常是使用arg这个单词,args相当于一个变量名,可以自己定义的
在上面的程序中,我们使用* args作为一个可变长度参数列表传递给add()函数 。在函数中,我们有一个循环实现传递的参数计算和输出结果 。
还可以直接传递列表或者数组的方式传递参数,以数组或者列表方式传递参数名前面加(*) 号
理解* * kwargs
**kwargs 允许你将不定长度的键值对, 作为参数传递给函数,这些关键字参数在函数内部自动组装为一个dict
下篇详细讲解 *args, **kwargs 的参数传递和使用敬请关注
python 类中的变量传递给类中的函数 为了把类中的变量传递给类中的函数,我们需要用到3个特定格式
① 第一个格式 @classmethod 的中文意思就是“类方法”,@classmethod声明了函数1是类方法,这样才能允许函数1使用类属性中的数据 。
② 第二个格式 cls 的意思是class的缩写 。如果类方法函数1想使用类属性(也就是类中的变量),就要写上cls为函数1的第一个参数 , 也就是把这个类作为参数传给自己,这样就能被允许使用类中的数据 。
③ 第三个格式是 cls.变量。类方法想使用类属性的时候,需要在这些变量名称前加上cls. 这就好比类方法和类之间的约法三章,所以但凡有任何格式错误都会报错 。
如果缺①,即缺了“@classmethod” , 类方法就不能直接利用类中的属性,于是报错
python函数调用的参数传递python的函数参数传递是"引用传递(地址传递)" 。
python中赋值语句的过程(x = 1):先申请一段内存分配给一个整型对象来存储数据1,然后让变量x去指向这个对象,实际上就是指向这段内存(这里有点和C语言中的指针类似) 。
在Python中,会为每个层次生成一个符号表 , 里层能调用外层中的变量,而外层不能调用里层中的变量,并且当外层和里层有同名变量时 , 外层变量会被里层变量屏蔽掉 。函数调用会为函数局部变量生成一个新的符号表 。
局部变量:作用于该函数内部,一旦函数执行完成 , 该变量就被回收 。
全局变量:它是在函数外部定义的,作用域是整个文件 。全局变量可以直接在函数里面应用,但是如果要在函数内部改变全局变量,必须使用global关键字进行声明 。

推荐阅读