2018-10-10浅拷贝和深拷贝及函数概念和相关操作
1.拷贝
将变量中的值复制一份,产生新的数据,然后将新的数据对用的地址返回
2.浅拷贝
- copy.copy(对象) :浅拷贝是直接拷贝地址(切片和字典的copy方法都是浅拷贝)
- copy.deepcopy(对象) :深拷贝是将地址对应的值拷贝,产生新的地址
import copy
a1 = [1, 2]
a2 = {'b': 10}
list1 = [a1, a2]
浅拷贝
list2 = copy.copy(list1)
list2[0].append(100)
print(list2)
print(list1)
深拷贝
import copy
list3 = copy.deepcopy(list1)
list3[0].append(100)
print(list3)
# print(list2)
print(list1)
一、函数就是对实现某一特定功能的代码段的封装
1.函数的分类
- a.自定义函数:自己声明实现的功能代码
- b.内置函数:系统已经声明实现的功能代码
2.声明函数
语法:def 函数名(参数列表)
函数体
def: pthon中声明函数的关键字
函数名:与变量一样,必须是标识符,不能是关键字,遵守PEP8的命名规范(所有字母小写,多个单词之间用下划线隔开),见名知义
(): 固定写法
冒号:固定写法
参数列表:又叫形参列表,参数1,参数2.....参数可有多个也可以没有
参数是用来从函数的外部给函数里面传值用的
函数体:就是实现特定功能的代码段
二、声明函数
- a.确定函数功能
- b.根据功能确定函数名
- c.确定参数(看实现的功能需不需要从函数外部传值,需要传几个)
- d.实现函数功能
- e.确定返回值
写一个函数打印两个数的和
def two_num_sum(a, b):
print(a + b)
two_num_sum(4, 6)
def print_star(n):
print('*' * n)
求连续整数和
def sum_n(n):
sum1 = 0
for x in range(n + 1):
sum1 += x
print(sum1)
sum_n(100)
三、声明函数时不会执行函数体,只有被调用时才会被执行
1.函数调用
函数名(实参列表)
函数名:必须声明过得函数
():固定写法
实参列表:数据1,数据2,.....可以有多个或没有,用来给形参赋值的
四、格式
1.函数名(实参列表)
2.函数的调用的过程
- 第一步:回到函数声明的位置
- 第二步:用实参个形参赋值
- 第三步:执行函数体
- 第四步:返回返回值
- 第五步:回到函数调用的位置,接着执行后面代码
五、位置参数和关键参数
1. 位置参数:在传值过程中,用按实参顺序 一一对应给形参赋值(一定要保证每个形参都必须有值)
2. 关键字参数:形参1 = 值1,形参2 = 值2,......
def func1(a, b, c):
print(a, b, c)
# 位置参数
func1(10,20,30)
#关键参数
func1(c = 200, b = 100, a = 300)
3. 默认参数
函数声明时可以给参数设置默认值,但是有默认值的参数列表必须放在最后
注意:有默认值的形参可以不传参数
def func2(a, c, b = 0):
print(id(a))
print(a, b, c)
num = 100
print(id(num))
# func2(10,20)
func2(num, c = 200) # 位置参数和关键字参数混合使用
4. 不定长参数
参数个数不确定时,可以在形参前面加*号将形参变为元祖,用来接收多个参数
如果函数有多个参数,那么不定长参数要放在后面
# 计算多个数的和
def sum1(*args):
sum2 = 0
for x in args:
sum2 += x
print(sum2)
sum1(1, 2, 3)
五、函数返回值
1. 概念
就是函数调用表达式的值,就是return关键字后面的表达式的值
Python中所有的函数都有返回值,返回值默认是None(当没有遇到return时函数的返回值就是None)
2. 说明
函数调用表达式 : 就是调用函数的那个语句(函数名(实参列表))
return :关键字,只能在函数体中,用来返回返回值和结束函数
任何函数都有返回值(当没有遇到return时函数的返回值就是None)
def func1():
print('hello')
i = func1()
print(i, type(i))
3. 将函数的返回值作为列表的元素
def func1():
print('hello')
i = [func1(), 100]
print(i)
** 4. 函数执行过程中遇到return就直接结束,把return后面的的结果作为返回值**
a = [1, 2]
def add_yuansu(b):
c = b[:]
c.append(100)
return c
print(a, add_yuansu(a))
注意:
函数返回值的确定:如果函数的功能会产生新的数据就将数据返回
# 计算一个数的阶乘
def jie_ceng(num):
sum1 = 1
for x in range(1, num + 1):
sum1 *= x
return sum1
a = jie_ceng(5)
print(a)