Python 学习笔记-7

Python 学习笔记-7:

  1. 深浅拷贝
  2. Set-集合
  3. 函数

1. 深浅拷贝

1. 浅拷贝-多层嵌套只拷贝第一层

1
2
3
4
5
6
a = [[1,2],3,4]
b = a.copy()
print(b) # 结果:[1,2],3,4
b[0][0] = 8
print(a) # 结果:[8,2],3,4
print(b) # 结果:[8,2],3,4

原理图:
原理图
原理图

2. 深拷贝-克隆一份

2. Set-集合

1. 集合的两大作用:

  1. 去重
  2. 关系测试
1
2
# 定义语法
s = set{'alex',1,2}

2. 关系测试:

  1. in ,not in

  2. 集合等价与不等价(==, !=)

  3. 子集(<)、超集(>)

    1
    2
    3
    4
    s=set('alvinyuan')
    s1=set('alvin')
    print('v' in s)
    print(s1<s)

4 联合(|)
联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()。

1
2
3
4
5
s1=set('alvin')
s2=set('yuan')
s3=s1|s2
print(s3) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}
print(s1.union(s2)) #{'a', 'l', 'i', 'n', 'y', 'v', 'u'}

5、交集(&)
与集合and等价,交集符号的等价方法是intersection()

1
2
3
4
5
s1=set('alvin')
s2=set('yuan')
s3=s1&s2
print(s3) #{'n', 'a'}
print(s1.intersection(s2)) #{'n', 'a'}

6、差集(-)
等价方法是difference()

1
2
3
4
5
s1=set('alvin')
s2=set('yuan')
s3=s1-s2
print(s3) #{'v', 'i', 'l'}
print(s1.difference(s2)) #{'v', 'i', 'l'}

7、对称差集(^)
对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法

1
2
3
4
5
6
symmetric_difference()
s1=set('alvin')
s2=set('yuan')
s3=s1^s2
print(s3) #{'l', 'v', 'y', 'u', 'i'}
print(s1.symmetric_difference(s2)) #{'l', 'v', 'y', 'u', 'i'}

3. 函数

1. 命名方式与变量相同

1
2
3
# 定义语法
def function():
print("This is a def!")

2. 不定长参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 传入无命名参数
def add(*args):
print(args)
sum = 0
for i in args:
sum += i
print(sum)

add(1,2,3,4,5,6)

# 传入命名参数
def print_info(**kwargs):
for i in kwargs:
print('%s : %s' %(i,kwargs[i]))

print_info(name='han',age='22',job='student')

# 同时传入命名和无命名参数
def print_info(*args,**kwargs):
…………
…………

print(1,2,3,name='han')
# 无命名参数必须在命名参数左边(前面)

3. 函数的返回值

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

  1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
  2. 如果未在函数中指定return,那这个函数的返回值为None
  3. return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。

4. 函数的作用域

python中的作用域分4种情况:
L:local,局部作用域,即函数中定义的变量;
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:globa,全局变量,就是模块级别定义的变量;
B:built-in,系统固定模块里面的变量,比如int, bytearray等。

  • 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
  • 当然,local和enclosing是相对的,enclosing变量相对上层来说也是local。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
x = int(2.9)        # int built-in

g_count = 0 # global
def outer():
o_count = 1 # enclosing
def inner():
i_count = 2 # local
print(o_count)
# print(i_count) 找不到
inner()
outer()

# print(o_count) #找不到