基本补充以及函数
set,是一个无序且不重复的元素集合
深浅copy
一、数字和字符串
对于数字和字符串而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。
二、其他基本数据类型
对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。
函数
一、定义和使用
def
函数名(参数):
...
函数体
...
返回值
二、内置函数
![](https://img2018.cnblogs.com/blog/1553831/201903/1553831-20190317125827732-1241902767.png)
lambda表达式
# ###################### 普通函数 ######################
# 定义函数(普通方式)
def
func(arg):
return
arg
+
1
# 执行函数
result
=
func(
123
)
# ###################### lambda ######################
# 定义函数(lambda表达式)
my_lambda
=
lambda
arg : arg
+
1
# 执行函数
result
=
my_lambda(
123
)
递归函数
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368...
def
func(arg1,arg2):
if
arg1
=
=
0
:
print
arg1, arg2
arg3
=
arg1
+
arg2
print
arg3
func(arg2, arg3)
func(
0
,
1
)
装饰器
装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展
装饰器的本质:就是一个闭包函数
def wrapper(func): # 装饰器
def inner(*args, **kwargs):
'''函数执行之前的内容扩展'''
ret = func(*args, **kwargs)
'''函数执行之前的内容扩展'''
return ret
return inner
迭代器
一、可迭代协议
可以被迭代要满足要求的就叫做可迭代协议。内部实现了__iter__方法
字符串,列表,元组,集合,字典都是可迭代的
二、迭代器协议
内部实现了__iter__,__next__方法
三、相同点
都可以使用for循环
生成器
常规定义函数,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果。
def func(): #这是一个简单的函数
a=1
return a
print(func())
def func():
print('第一次')
a = 1
yield a # 返回第一个值
print(’第二次')
yield 12 # 返回第二个值
ret = func() # 得拿到一个生成器
print(next(ret))#取第一个值
print(next(ret))# 取第二个值
print(next(ret))# 取第三个值,会报错,因为没有yield第三个值
a=1
return a
print(func())
def func():
print('第一次')
a = 1
yield a # 返回第一个值
print(’第二次')
yield 12 # 返回第二个值
ret = func() # 得拿到一个生成器
print(next(ret))#取第一个值
print(next(ret))# 取第二个值
print(next(ret))# 取第三个值,会报错,因为没有yield第三个值
yield from 就相当于for循环
列表推导式
l=[i 条件语句]
生成器表达式
类似列表推导式
l=(i 条件语句)#yeild
通过next()取值