本节课讲了函数相关知识。
一、申明一个函数,第一个参数是整型, 第二个参数是list类型,
# l 有一个默认值,默认值为[]空列表
def f(x,l=[]):
for i in range(x):
l.append(i*i)
print(l)
# f(2) = f(2, l=[])
f(2)
# 输出什么[0, 1]
f(3,[3,2,1])
# 结果: [3, 2, 1, 0, 1, 4]
f(x=3, l=[])
# 结果: [0, 1, 4]
'''
函数的额关键字
def 定义函数
return 返回这
pass 滤过
exit(1) 直接退出
函数的参数
*args tuple参数,对应赋值
**kwargs dict参数,对应赋值
fun(*args, **kwargs)
fun(1, 2, 3, 4, 5, a=10, b=40)
args = (1, 2, 3, 4, 5)
kwargs = dict(a=10, b=40)
匿名函数
def add(x, y):
return x+y
add = lambda x,y:x+y
'''
def add1(x, y):
print(x+y)
def add2(x, y):
return x+y
def hello():
exit(1)
print("hello")
def test(m, *args, **kwargs):
print("m = {0}".format(m))
print("args = {0}".format(args))
print("kwargs = {0}".format(kwargs))
test(10,1,11,12)
# test(m=10, 1, 2, 3, a=1, b=2)
add1(1, 2)
result = add2(1, 2)
print(result)
hello()
二.高阶函数
都是可以通过代码逻辑实现的。
都是可以通过代码逻辑实现的
但是你写的函数的负责程序,或者算法不一定有人家内置的好
'''
from functools import reduce
def f(x):
return x*x
print(map(f, [1, 2, 3, 4]))
print(list((map(f, [1, 2, 3, 4]))))
for i in map(f, [1, 2, 3, 4]):
print(i)
def testMap(fun, iter):
l = list()
for i in iter:
l.append(fun(i))
return l
print(testMap(f, [1, 2, 3, 4]))
def add(x, y):
return x+y
reduce(add, [1, 2, 3, 4, 5])
# 1, 2 = 3
# 3, 3 = 6
# 6, 4 = 10
# 10, 5 = 15
# 唯一用的比较多的,就是sorted
# sorted(iterable, key, reverse)
# iterable 一个可迭代的对象
# key 对什么进行排序
# reverse bool类型,如果为true为反序, 默认为false
# 返回值是一个list
print(sorted([1, 4, 342, 3, 45, 76, 435, 34], reverse=True))
m = dict(a=1, c=10, b=20, d=15)
print(m)
print(sorted(m.items()))
print(sorted(m.items(), key=lambda x: x[0]))
print(dict(sorted(m.items(), key=lambda x: x[1])))
# print(sorted(m.items(), key = lambda d:d[1], reverse = True))
# for i in m:
# print(i)
#
# for i in m.items():
# print(i)
# 字典有三种初始化的方法
d1 = dict(a=1, b=2)
d2 = {"a": 1, "b": 2}
d3 = dict([("a", 1), ("b", 2)])
print(d1, d2, d3)
三:列表生成式
[exp for val in collection if condition]
生成器
方法一:
(exp for val in collection if condition)
方法二:
'''
def jgg():
number = list()
for i in range(1, 10):
number.append(i)
for A in [x for x in range(1, 10)]:
for B in [x for x in range(1, 10) if x != A]:
for C in [x for x in range(1, 10) if x != A and x != B]:
for D in [x for x in range(1, 10) if x != A and x != B and x!= C]:
print("A = {0} B = {1} C = {2} D = {3}".format(A, B, C, D))
# jgg()
a1 = (x for x in range(1, 10) if x%2==0)
print(a1)
# python2 a1.next()
print(next(a1))#python3 是直接调用next方法
print("##"*10)
for i in a1:
print(i)
a2 = [x for x in range(1, 10) if x%2==0]
print(a2)
def test():
a = 1
for i in range(1, 10):
yield i
# return i
a += 1
# return i
#return和yield的区别
# yield 可以理解成return,但是比return多一些角色
# yiele 每次都返回,但是下一次取值时,从上一次yield的下一行开始
m = test()
print(m)