标签:tool append ret false abs 最小 strip 参数 推导式
5.2.6 函数可以当作参数进行传递def func(arg):
arg()
def ggg():
print(123)
func(ggg)#输出就结果为123
def func(arg):
v1 = arg()
print(v1)
def show():
print(666)
result = func(show)
print(result)
用于表达就简单函数
# 三元运算,为了解决简单的if else的情况,如:
if 1 == 1:
a = 123
else:
a = 456
a = 123 if 1 == 1 else 456
# lambda表达式,为了解决简单函数的情况,如:
def func(a1,a2):
return a1 + 100
func = lambda a1,a2: a1+100
#列表的所有方法基本上返回值都是none,字符串的所有方法都是返回新的值
# 练习题1
USER_LIST = []
def func0(x):
v = USER_LIST.append(x)
return v
result = func0(‘alex‘)
print(result)
# 练习题2
def func0(x):
v = x.strip()
return v
result = func0(‘ alex ‘)
print(result)
############## 总结:列表所有方法基本上都是返回None;字符串的所有方法基本上都是返回新值 #################
# 练习题3
USER_LIST = []
func1 = lambda x: USER_LIST.append(x)
v1 = func1(‘alex‘)
print(v1)
print(USER_LIST)
# 练习题4
func1 = lambda x: x.split(‘l‘)
v1 = func1(‘alex‘)
print(v1)
# 练习题5
func_list = [lambda x:x.strip(), lambda y:y+199,lambda x,y:x+y]
v1 = func_list[0](‘alex ‘)
print(v1)
v2 = func_list[1](100)
print(v2)
v3 = func_list[2](1,2)
print(v3)
内置函数
其他
type
输入输出
input
强制转换
set()
pow
v = pow(2,3)
print(v)
round
v = round(1.127,2)
print(v)
编码相关
chr,将十进制数字转换成 unicode 编码中的对应字符串。
v = chr(99)
print(v)
ord,根据字符在unicode编码中找到其对应的十进制。
num = ord(‘中‘)
应用:
import random
def get_random_code(length=6):
data = []
for i in range(length):
v = random.randint(65,90)
data.append(chr(v))
return ‘‘.join(data)
code = get_random_code()
print(code)
import random # 导入一个模块
v = random.randint(起始,终止) # 得到一个随机数
高级一点的内置函数
map,循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回。
v1 = [11,22,33,44]
result = map(lambda x:x+100,v1)
print(list(result)) # 特殊
filter
v1 = [11,22,33,‘asd‘,44,‘xf‘]
def func(x):
if type(x) == int:
return True
return False
result = filter(func,v1) # [11,]
print(list(result))
result = filter(lambda x: True if type(x) == int else False ,v1)
print(list(result))
result = filter(lambda x: type(x) == int ,v1)
print(list(result))
reduce
import functools
v1 = [‘wo‘,‘hao‘,‘e‘]
def func(x,y):
return x+y
result = functools.reduce(func,v1)
print(result)
result = functools.reduce(lambda x,y:x+y,v1)
print(result)
数学相关
v = abs(-1)
print(v)#得到1,求出数字的绝对值
v = 55
v1 = float(55)
print(v1)
v = [1,2,311,21,3,]
result = max(v)
print(result)#输出311找到最大值
v = [1,2,311,21,3,]
result = min(v)
print(result)
v = [1,2,311,21,3,]
result = sum(v)
print(result)#求和
a,b = divmod(1001,5)
print(a,b)
# 练习题 请通过分页对数据进行展示
"""
要求:
每页显示10条数据
让用户输入要查看的页面:页码
"""
USER_LIST = []
for i in range(1,836):
temp = {‘name‘:‘你少妻-%s‘ %i,‘email‘:‘123%s@qq.com‘ %i }
USER_LIST.append(temp)
# 数据总条数
total_count = len(USER_LIST)
# 每页显示10条
per_page_count= 10
# 总页码数
max_page_num,a = divmod(total_count,per_page_count)
if a>0:
max_page_num += 1
while True:
pager = int(input(‘要查看第几页:‘))
if pager < 1 or pager > max_page_num:
print(‘页码不合法,必须是 1 ~ %s‘ %max_page_num )
else:
"""
# 第1页:USER_LIST[0:10] -> 0123456789
# 第2页:USER_LIST[10:20]
# 第3页:USER_LIST[20:30]
...
"""
start = (pager-1) * per_page_count
end = pager * per_page_count
data = USER_LIST[start:end]
for item in data:
print(item)
进制转换相关
num = 13
v1 = bin(num)
print(v1)
num = 8
v1 = oct(num)
print(v1)
# 二进制转化成十进制
v1 = ‘0b1101‘
result = int(v1,base=2)
print(result)
# 八进制转化成十进制
v1 = ‘0o1101‘
result = int(v1,base=8)
print(result)
# 十六进制转化成十进制
v1 = ‘0x1101‘
result = int(v1,base=16)
print(result)
num = 16
v1 = hex(num)
print(v1)
def f():
print(123)
def b():
return f
v = b()#v就是f函数
v()#执行f函数
闭包应用场景:装饰器,sqlaeilde源码中
闭包的概念:为函数创建一块区域,并维护自己数据,以便以后调用
def cf():
def tm():
print("123")#内层函数需要使用才叫一个闭包
return tm
c = cf()#内存地址会保留这次数据的函数执行,到使用c()把tm函数执行使用后内存才会销毁
递归(默认python递归最大递归次数1000次)
def func():#死循环实例
print(1)
func()
func()
###################################################
def func(a,b):#斐波那契数列,递归实现方法
if a ==5:
return 500000
print(b)
func(b,a+b)
func(0,1)
递归效率不高,尽量减少用递归。用while代替
# 递归的返回值
def func(a):
if a == 5:
return 100000
result = func(a+1) + 10
v = func(1)
name = ‘alex‘
def func():
def inner():
print(name)
return inner
v =func()
def func():
pass
v = func
v()
######################################################
def base():
print(1)
pass
def bar():
print(2)
pass
base = bar
base()#执行bar函数
#####################################################
重点:(记住格式以及执行原理)
def func(arg):
def iner():
mun = arg()
print(mun)
return mun
return iner
@func#执行func函数并把下面参数传递相当于func(index),将func的返回值重新赋值给下面的函数名相当于index = func(index)
def index():
print(123)
return 666
index()
def x(func):
def inner(a1,a2):
return func(a1,a2)
return inner
@x
def index(a1,a2):
pass
# index = inner
index(1,2)
# ################################### 参数统一的目的是为了给原来的index函数传参
def x(func):
def inner(a1,a2):
return func()
return inner
@x
def index():
pass
# func = 原来的index函数u
# index = inner
index(1,2)
装饰器应用
# 计算函数执行时间
def wrapper(func):
def inner():
start_time = time.time()
v = func()
end_time = time.time()
print(end_time-start_time)
return v
return inner
@wrapper
def func1():
time.sleep(2)
print(123)
@wrapper
def func2():
time.sleep(1)
print(123)
def func3():
time.sleep(1.5)
print(123)
func1()
装饰器应用场景:想要为函数拓展功能时,可以选择用装饰器
装饰器编写格式
def func(参数):
def iner(*args,**kwargs):
mun = arg(*args,**kwargs)
return 参数()
return iner内层函数
装饰器应用格式
@外层函数
def index():
print(123)
return 666
使用函数index()
带参数的装饰器场景:常见在flask框架中,让装饰器实现函数要执行N次
关于参数
带参数的装饰器实例:
def x(counter):#实现效果@x几次输入几次执行,并返回结果以列表呈现
def wad(func):
def inte(*args,**kwargs):
a = []
for i in range(counter):
e = func(*args,**kwargs)
a.append(e)
return a
return inte
return wad
@x(10)
def gg(c):
print(c)
列表推导式
目的方便的生成一个列表
方式一
vp = [i for i in "alex"#可迭代对象]
print(vp)#输出["a","l","e","x"]
方式二
vp = [i+100 for i in range(5)]
print(vp)#输出[100,101,102,103,104]
"""
目的:方便的生成一个列表。
格式:
v1 = [i for i in 可迭代对象 ]
v2 = [i for i in 可迭代对象 if 条件 ] # 条件为true才进行append
"""
v1 = [ i for i in ‘alex‘ ]
v2 = [i+100 for i in range(10)]
v3 = [99 if i>5 else 66 for i in range(10)]
def func():
return 100
v4 = [func for i in range(10)]
v5 = [lambda : 100 for i in range(10)]
result = v5[9]()
def func():
return i
v6 = [func for i in range(10)]
result = v6[5]()
v7 = [lambda :i for i in range(10)]
result = v7[5]()
v8 = [lambda x:x*i for i in range(10)] # 新浪微博面试题
# 1.请问 v8 是什么?
# 2.请问 v8[0](2) 的结果是什么?
# 面试题
def num():
return [lambda x:i*x for i in range(4)]
# num() -> [函数,函数,函数,函数]
print([ m(2) for m in num() ]) # [6,6,6,6]
# ##################### 筛选 #########################
v9 = [i for i in range(10) if i > 5]
集合推导式
vp = set(i for in "alex")
字典推导式
v1 = {"k"+str(i):i for i in range(10)}
标签:tool append ret false abs 最小 strip 参数 推导式
原文地址:https://blog.51cto.com/11985686/2380400