【python之路15】深浅拷贝及函数
一、集合数据类型(set):无序不重复的集合,交集、并集等功能
二、三元运算符
三、深浅拷贝
1)字符串和数字:深浅内存地址都一样
2)其他:浅拷贝:仅复制最外面第一层
- 深拷贝:除了最内层其他均拷贝
四、函数:
1)创建:def 函数名(参数)
2)返回值
- return 返回值,如果不指定return则默认返回None
- 一旦遇到return后面的代码不再执行
3)参数
- 形参、实参
- 普通参数数量要一致并且一一对应
- 指定参数,执行参数的时候指定形参=实参
- 指定参数的默认值,默认值一定要放在参数的尾部
- 动态参数 *args **args,调用的时候可以使用*实参列表,这样相当于循环实参加入元组,**字典,可以直接传输字典不需要(key1=123,key2=456)
def f1(*args): print(args) f1(11,22,33) #打印:(11, 22, 33)
def f1(**kwargs): print(kwargs) f1(k1=11,k2=22) #打印输出:{'k1': 11, 'k2': 22}
def f1(*args,**kwargs): print(args,kwargs) f1(11,22,33,k1=11,k2=22) #打印输出:(11, 22, 33) {'k1': 11, 'k2': 22}
def f1(n,*args,**kwargs): print(n,args,kwargs) f1(11,22,33,k1=11,k2=22) #打印输出:11 (22, 33) {'k1': 11, 'k2': 22}
def f1(*args): print(args) n = [11,22,33] f1(n) #打印输出:([11, 22, 33],) f1(*n) #打印输出:(11, 22, 33)
def f1(**kwargs): print(kwargs) n = {"k1":11,"k2":22} #f1(n) #报错 f1(**n) #打印输出:{'k1': 11, 'k2': 22}
4)在python中传参数时,对列表、元组、字典类型传输的是引用
1 def func1(args): 2 args.append(123) 3 4 li = [11,22,33] 5 func1(li) 6 print(li) #输出[11, 22, 33, 123]
五、局部变量和全部变量
1)全局变量用大写,局部变量用小写
2)全局变量在函数内部可以使用,但不能修改,如果要修改,那么要加global 变量名
name='张三' def f1(): name="李四" #不会修改全局变量,会在函数内部新建一个变量 return(name) def f2(): return ("我的名字是" + name) #可以使用全局变量 def f3(): global name #加上global之后下面可以修改全局变量的值,加上global后相当于把name变成全局变量,如果外层没有name则声明全局变量name,如果有则引入全局变量name name = "王五" return name print(f1()) #李四 print(f2()) #我的名字是张三 print(f3()) #王五
def func1():
a = 10
def func2():
a = 20
print(a)
func2()
print(a)
func1() #打印结果:20 10
def func1(): a = 10 def func2(): nonlocal a #不作为局部变量,向上层找,但不能超出局部变量范围,不会找到全局变量 a = 20 print(a) func2() print(a) func1() #打印结果:20 20
函数:globals() 打印全局变量
locals() 打印局部变量 ,放在全局打印的与globals一样,放在函数内则只打印函数内部的变量
六、判断是某个实例属于哪个类
st = 'abdc' #第二个参数可以是元组,例如判断st是字符串或字典或列表, #则可以写为:bol = isinstance(st,(str,dict,list) bol = isinstance(st,str) print(bol) #返回True,说明st是字符串类型
def func1(): a = 10 def func2(): nonlocal a #不作为局部变量,向上层找 a = 20 print(a) func2() print(a) func1() #打印结果:20 20