# 函数,提高代码复用
# 函数不写return,默认返回None
# 1、定义函数
def print_hello():
print("Hello!!")
# 2、函数的调用
print_hello()
# 3、有参函数
def func1(name):
print("my name is ", name)
func1("小白")
# 4、默认值参数,默认值参数必须在后面no why
def func2(name, age=18):
print("my name is {}, age is {}".format(name, str(age)))
func2("小白") # 没有传age,则取默认值,有则使用传的值
# 5、可变参数列表
def func3(*args):
print(args) # (1, 2, 3, 4, 5, 6)
func3(1, 2, 3, 4, 5, 6) # 可传任意长度个参数,内部使用args来获取,操作元组的形式
def func4(name, *args):
print(name, args)
func4("李四",1,2,3,4,5)
# 6、关键字参数
def func5(**kwargs):
print(kwargs) # {'name': '张三', 'age': 20}
func5(name="张三", age=20) # 指定每个参数对应的key
# 7、函数返回值
def func6(a, b):
return a + b
print(func6(1, 4))
# 8、函数多个返回值
def func7(a, b):
return a + b, a * b
add, mult = func7(99, 29) # 返回的是元组,语法上返回的元组可以省略括号
print(add, mult)
print(type(func7(99, 29))) # <class 'tuple'>
# 9、舍弃函数的返回值
add, _ = func7(99, 29) # 相当于返回了两个值,有一个不用
# 10、map()函数接收两个参数,参数1:函数 参数2:Iterable
# map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
def func8(x):
return x * x
r = map(func8, [1,2,3,4])
for i in r:
print(i)
print(type(r)) # <class 'map'>
# print(list(r))
print(list(map(func8, [1,2,3,4]))) # 一般这么写
# demo 将列表中数字转成字符串
def toStr(num):
return str(num)
temp_list0 = [1,2,3,4,5,6]
new_temp_list0 = []
for i in temp_list0:
new_temp_list0.append(toStr(i))
print(new_temp_list0)
print(list(map(toStr, temp_list0))) # 使用map完成上述操作
# 11、filter()函数也是接收一个函数和一个序列
# filter把传入的函数依次作用在每个元素,然后根据返回值是True还是False决定保留还是丢弃
def func9(x):
return x % 2 ==1
n = filter(func9, [1,2,3,4])
print(type(n)) #<class 'filter'>
for i in n:
print(i)
print(list(filter(func9, [1,2,3,4]))) # 一般这么写
# 12、sorted()排序
temp_list = [1,6,2,5,4,3,8,7]
def func10(x):
if x == 'Zhang':
str.upper(x)
print(sorted(temp_list)) # 默认升序
print(sorted(['CCC', 'bb', 'ffff', 'z'] , key = str.lower)) # 将列表中的每个元素变为小写,再按每个元素中的每个字母的ascii码从小到大排序
print(sorted([33,22,-10,-20,9,-1], key = abs, reverse=True)) # 取绝对值,排序,然后反转
# demo
temp_list2 = [{'name':'abc','age':20},{'name':'def','age':30},{'name':'ghi','age':25}] #列表中的元素为字典
def getAge(s):
return s['age']
sorted(temp_list2, key = getAge)
# 13、函数作为返回值
def add(a, b):
def cel():
return a + b
return cel # 函数返回一个函数
print(add(1, 2)())
# 14、匿名函数
func11 = lambda x : x * x
print(func11(10)) # 执行该匿名函数
# 15、列表生成式
'''
range(start, end, step)
1、传一个参数,则生成一个从0开始到传入参数结束的整数列表
2、传入两个参数时,第一个参数起始位,第二个参数结束位
3、第三个参数表示递增或递减值,默认为0
'''
# demo1
for i in range(5): # [0,1,2,3,4]
print(i)
# demo2 使用场景
import random
red_num = random.sample(range(1,34), 6) # 从列表中随机选出6个元素
# demo3
new_num = []
for num in red_num:
temp = str(num).zfill(2) # 转成字符串,2位,不足左边补0
new_num.append(temp)
print(new_num)
# 列表生成式写法
new_num2 = [str(num).zfill(2) for num in red_num]
print(new_num2)
# demo4 list会将所有元素都放入到内存
s = [i for i in range(1, 101, 2)] # 1-100所以奇数
print(s)
# demo5 generator生成器,在循环的时候,根据规则计算下一个元素,然后放到内存
s1 = (i for i in range(1, 101, 2))
print(s1) # <generator object <genexpr> at 0x10fcbcb10>
for i in s1:
print(i)
# 三元运算符
a = 5
b = 4
if a > b:
c = a
else:
c = b
# 三元表达式
c = a if a > b else b
print(c)