变量 1 2 3 4 5 变量和数据都是保存再内存中的 python中函数的参数传递和返回值都是靠引用传递的 数据保存再内存中的某个位置,变量中存放的时数据再内存中的地址 引用是指变量中记录数据的地址 可以使用id () 函数查看变量中保存数据所在的内存地址
局部变量和全局变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 局部变量是函数内部定义的变量,只能在函数内部使用 函数执行结束后,局部变量会被系统回收 全局变量是在整个py文件中声明 注:函数在执行时,变量处理过程: 首先会查找函数内部是否存在制定名称的变量,如果有,直接使用 如果没有会查找函数外不是否存在制定名称的全局变量。 如果函数内部存在和全局变量一样名称的局部变量,在函数内部不能直接修改全局变量的值,如果需要修改全局变量的值,需要使用 global 关键字进行申明。global 会告诉解释器,后面的变量是一个全局变量,这样在赋值是就不会创建局部变量 注:python3 新增 nonlocal 关键字,表示 该变量不是局部变量 如: a = 1 def run (): global a a = 2
交换两个变量的值 a b 变量 1 2 3 4 5 6 7 8 9 10 11 12 方法一: 使用第三个中间变量 c c = a a = b b = c 方法二:通过 "+ -" 操作计算 a = a + b b = a - b a = a - b 方法三:python特有 a ,b = b , a
函数返回值为元组: 如果一个函数的返回类型是元组小括号可以省略
元组类型的返回值也可以用多个变量分别接受,使用多个变量接收结果时,变量个数和元组个数应一致。
如:
1 2 3 4 5 6 7 8 9 def run (): a = 1 b = 2 return a,b result = run() gl_a, gl_b = run()print (gl_a) print (gl_b)
函数缺省参数 定义函数时可以给某个参数指定一个默认值,有默认值的参数就叫缺省参数
调用函数时如果没传值,则默认为函数内部定义的默认值
注:
带有默认值的缺省参数必须要放在参数列表的末尾
调用函数时如果有多个缺省参数,需要制定参数名,这样解释器才能知道对应关系
如:
1 2 3 4 5 6 7 8 def run (name,gender=True ): text = "男" if not gender: text = "女" print (text) run("小明" ) run("小花" ,False )
函数多值参数 一个函数在不确定个数参数时会用到多值参数
python中有两种多值参数:
参数名前加一个*可以接收元组
参数名前增加两个 *可以接收字典。
一般给多值参数命名时,习惯使用以下两个名字
args——存放元组参数,前面有一个
*kwargs——存放字典的参数,前面有两个
args是arguments的缩写,有变量的含义 kw是keyword的缩写,kwards可以记忆键值对参数
如:
1 2 3 4 5 6 7 8 9 10 11 12 13 def run (*args,**kwargs ): print (args) print (kwargs) run(1 ,2 ,3 ,name="a" ,age=12 )def run (*args,**kwargs ): print (args) print (kwargs) args = (1 ,2 ,3 ) kw = {"name" :"a" ,"age" :12 } run(*args,**kw)
私有化 1 2 3 4 5 6 7 xx: 公有变量_x : 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问__xx :双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)__xx__ :双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字 xx_:单后置下划线,用于避免与Python关键词的冲突 注:通过name mangling(名字重整(目的就是以防子类意外重写基类的方法或者属性)如:_Class__object )机制就可以访问private 了。
总结
父类中属性名为__名字的,子类不继承,子类不能访问
如果在子类中向__名字赋值,那么会在子类中定义的一个与父类相同名字的属性
_名的变量、函数、类在使用from xxx import * 时都不会被导入