一:三元表达式
x = 10
y = 20
res = x if x>y else y #条件为真取前面的值,条件为假取else后的值
x if x>y else y #条件为真取前面的值,条件为假取else后的值
二:递归函数
一个函数在内部调用其本身,则就称这个函数为递归函数。递归分为两个阶段:递推阶段和回溯阶段。
def fact(n): #fact(n) = n!
if n==1:
return 1
return n*fact(n-1)
print(fact(5)) #120
三:匿名函数
使用关键字 lambda 来定义一个匿名函数。匿名函数有一个限制就是只能有一个表达式。匿名函数一次性使用,可随时随处定义。匿名函数主要用在与一些内置函数的配合使用上。
lambda x,y:x*y # x,y是该匿名函数的参数,冒号后面跟一个表达式,不需要return语句,匿名函数自动返回该表达式的结果
四:内置函数
一:max(),取最大值
# max(*args,key=None,default=None) max内参数的情况
alist = [1,2,3,4,5]
print(max(alist)) # 5
adict = {
'rock':15000,
'kule':3000,
'smile':80000,
'soso':10000
}
res = max(adict,key=lambda k:adict[k]) # key提供进行比较的依据,使用默认值None时,则比较的依据就是第一个参数的元素本身
print(res) # smile
二:min(),取最小值
# min(*args,key=None,default=None)
alist = [1,2,3,4,5]
print(min(alist)) # 1
adict = {
'rock':15000,
'kule':3000,
'smile':80000,
'soso':10000
}
res = min(adict,key=lambda k:adict[k]) # key提供进行比较的依据,使用默认值None时,则比较的依据就是第一个参数的元素本身
print(res) # kule
三:map()映射/reduce()压缩
#map(func,*iterables)
def square(x):
return x**2
alist = [1,2,3,4,5]
res = map(square,alist) #得到的res是一个迭代器
print(res) #<map object at 0x00000259F17675C0>
print(list(res)) #使用list方法可以把迭代器中的值一次性取出放入一个列表,[1, 4, 9, 16, 25]
from functools import reduce #使用reduce前需先导入
# reduce(function,sequence,initial=None) 第三个参数为初始值,默认值为None
# 其工作原理为 reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) 所有这个函数必须接收两个参数
def add(x,y):
return x+y
alist = [1,2,3,4,5]
res = reduce(add,alist)
print(res) # 15
四:filter()过滤函数
# filter(function_or_None,iterable)
#filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
def not_empty(s):
return s and s.strip()
res = list(filter(not_empty, ['A', '', 'B', None, 'C', ' ']))
print(res) #['A', 'B', 'C']
def is_odd(x): #判断是否是奇数
return x % 2 ==1
res1 = filter(is_odd,[0,1,2,3,4,5,6,7,8,9]) #得到的是一个迭代器对象
print(res1) #<filter object at 0x000001B6A33C7A58>
print(list(res1)) # [1, 3, 5, 7, 9]
五:sorted()排序
# sorted(iterable, /, *, key=None, reverse=False)
res = sorted([4,2,9,3,7,5])
print(res) #[2, 3, 4, 5, 7, 9] 默认按升序排序
res1 = sorted([4,2,9,3,7,5],reverse = True) # reverse设置为True,则该排序以降序排序
print(res1) #[9, 7, 5, 4, 3, 2]
res2 = sorted([-9,3,7,1,-5],key=abs) # key 接收的是一个函数,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序
print(res2) #[1, 3, -5, 7, -9] 按绝对值进行升序排序
六:其他一些内置函数
print(abs(-1)) #取绝对值函数
#all(iterable) 可迭代对象中的元素全为真是返回True,可迭代对象为空时,返回True
print(all([1,2,0,3,4])) # False
print(all([])) #True
#any(iterable) 可迭代对象中的元素只要有一个为真时返回True,可迭代对象为空时,返回False
print(any([0,None,[],1])) #True
print(any([])) #False
print('你好rock'.encode('utf-8')) #b'\xe4\xbd\xa0\xe5\xa5\xbdrock'
print(bytes('你好rock',encoding='utf-8')) #b'\xe4\xbd\xa0\xe5\xa5\xbdrock'
print(chr(65),chr(90),chr(97),chr(122)) # ASCII码表排序位置上对应的字符
print(ord('A'),ord('Z'),ord('a'),ord('z')) #找到该字符在ASCII码表上的排序
print(dir([1,2])) #找到传入对象的所有内置方法
res =divmod(10,3) #执行除法操作,并以元组的形式返回 商和余数
print(res) #(3, 1)
globals() #得到全局作用域中的名字
locals() #得到局部作用域中的名字
res1 = eval('1+9') #可以把字符串中的表达式转成真正的表达式进行运算,并返回该表达式的结果
print(res1) # 10
print(eval(' 1+1 ')) # 2
print(eval('[1,2,3,4]')) # [1, 2, 3, 4] 可以把字符串中的列表、字典等转化成真正的列表、字典数据类型
print(eval('{"name":"rock","age":18}')) #{'name': 'rock', 'age': 18}
eval函数--将字符串str当成有效的表达式来求值并返回计算结果。
其他用法,可以把字符串对象转换为相应的list,tuple,dict对象
该函数的功能强大,但存在安全性风险!
如:
a = "__import__('os').system('dir')"
b= eval(a)
怎么避免安全问题?
1、自行写检查函数;
2、使用ast.literal_eval:import ast