Python一些基础知识点(二)

Python知识盲点(二)

1.深拷贝,浅拷贝

浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。

深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象

1.1浅拷贝

import copy
a = [10,20,[5,6]]
b=copy.copy(a)
print("a:",a) # a:[10,20,[5,6]]
print("b:",b) # b:[10,20,[5,6]]
b.append(30)
b[2].append(7)
print("a:",a) # a:[10,20,[5,6,7]]
print("b:",b) # b:[10,20,[5,6,7],30]

1.2深拷贝

import copy
a = [10,20,[5,6]]
b=copy.deepcopy(a)
print("a:",a) # a:[10,20,[5,6]]
print("b:",b) # b:[10,20,[5,6]]
b.append(30)
b[2].append(7)
print("a:",a) # a:[10,20,[5,6]]
print("b:",b) # b:[10,20,[5,6,7],30]

# 即:a完全没变

2.参数

2.1 传递不可变对象是浅拷贝

传递int,float ,字符串,元组,布尔值的时候,实际上传递的是对象的引用。在对这些参数进行写操作的时候,会创建一个新的对象拷贝

2.2 位置参数

即:最常见的那种

2.3 默认值参数

def f(a,b,c=10):
	print(a,b,c)
f(8,9)

2.4命名参数

def f(a,b,c):
    print(a,b,c)
    
f(c=10,a=20,b=30) # 20,30,10

2.5 可变参数

  • *param,将多个参数收集到一个“元组”对象中
  • **param,将多个参数收集到一个字典对象中

2.6强制命名参数

在带星号的“可变参数”后面,增加新的参数,必须是“强制命名参数”

def f(*a, b, c):
    print(a,b,c)
    
# f(2,3,4) #会报错,因为a是可变参数,那么2,3,4这三个该如何组成列表传给a是不确定的
f(2,b=3,c=4) # (2,)34

3.lambda表达式和匿名函数

3.1 lambda基本语法

lambda arg1,arg2,arg3……:<函数体>

arg1, arg2,arg3为函数的参数,<表达式>相当于函数体

f = lambda a,b,c:a+b+c
print(f) # <function <lambda> at 0x0000……>
printf(f(2,3,4)) # 9

g = [lambda a:a*2, lambda b:b*3, lambda c:c*4]
print(g[0](6),g[1](7),g[2](8)) # 12 21 32

4.eval()函数

功能:将字符串str当成有效的表达式来求值,并返回计算结果

语法:eval(source[, globals[, locals]]) ->value

参数:

  • source: 一个Python表达式或函数compile()返回的代码对象
  • globals: 可选,必须是字典
  • locals: 可选,任意的映射对象
s = "print("abcdefg")"
eval(s) # abcdefg

a = 10
b = 20
c = eval("a+b")
print(c) # 30

dict1 = dict(a=100,b=200)
d = eval("a+b",dict1)
print(d) # 300

5.nonlocal, global关键字

nonlocal: 用来声明外层的局部变量

global: 用来声明全局变量

a = 100
def outer():
    b = 10 #(1)
    def inner():
        nonlocal b # 声明外部函数的局部变量,即(1)处的b可以作用在inner里
        print("inner b:",b)
        b = 20
        
        global a # 声明全局变量,即首行的a可以作用于这里
        a = 1000
    inner()
    print("outer b:",b)
outer()
print("a:",a)

'''
输出结果:
inner b:10
outer b:20
a:1000
'''

猜你喜欢

转载自blog.csdn.net/johnny_love_1968/article/details/115425170