python函数(二)

一:三元表达式

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值