py之函数定义与常用函数

python内置函数:https://www.runoob.com/python/python-built-in-functions.html
python自定函数 def myfun():
常用函数:
ads() 绝对值函数
**lower()**小写转换函数
**upper()**大写转换函数
sqrt () 求平方根
list () 将元组(tuple)转成list
capitalize() 函数将字符串的首字母转为大写,其余变为小写
map 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
L2 = list(map(normallize,L1))

sum(iterable[, start])

iterable – 可迭代对象,如:列表、元组、集合。
start – 指定相加的参数,如果没有设置这个值,默认为0。
sum([0,1,2]) 3
sum((2, 3, 4), 1) # 元组计算总和后再加 1 #10
sum([0,1,2,3,4], 2) # 列表计算总和后再加 2 #12
常见的用法还有 sum(i*i for i in L) 对L中的每个元素求平方然后求和

自定义的函数可以返回多个数据,返回的数据相当于一个tuple
函数在定义的时候可以设置默认参数,def power(x, n=2): 此时第二个参数可以不用传
*函数还可以定义可变参数 def fn(args): 在参数前加 星号

def average(*args):
if len(args)==0:
return 0.0
else:
return sum(args)*1.0/len(args)
print average()
print average(1, 2)
print average(1, 2, 2, 3, 4)

isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。。

isinstance (a,(str,int,list)) # 是元组中的一个返回 True

python还可以把函数作为参数传入函数

reduce()
函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

例如,编写一个f函数,接收x和y,返回x和y的和:

def f(x, y):
return x + y
调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

先计算头两个元素:f(1, 3),结果为4;
再把结果和第3个元素计算:f(4, 5),结果为9;
再把结果和第4个元素计算:f(9, 7),结果为16;
再把结果和第5个元素计算:f(16, 9),结果为25;
由于没有更多的元素了,计算结束,返回结果25。
filter
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
结果是产生新的符合函数 f()条件的list
sorted
sorted()可以直接对所选List做出默认得从小到大的排序。
sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。 sorted(list,cmp)
Python 3.X 的版本中已经没有 cmp 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含的方法有:
import oprater
a=1
b=2
operator.lt(a, b)
operator.le(a, b)
operator.eq(a, b)
operator.ne(a, b)
operator.ge(a, b)
operator.gt(a, b)
operator.lt(a, b)
operator.le(a, b)
operator.eq(a, b)
operator.ne(a, b)
operator.ge(a, b)
operator.gt(a, b)
‘’’
简单说下这几个函数的意思吧。
lt(a, b) 相当于 a < b
le(a,b) 相当于 a <= b
eq(a,b) 相当于 a == b
ne(a,b) 相当于 a != b
gt(a,b) 相当于 a > b
ge(a, b)相当于 a>= b
‘’’
python还可以返回一个函数。
def calc_prod(lst):
def f(x,y):
return x*y
def s():
return reduce(f,lst)
return s

f = calc_prod([1, 2, 3, 4])
print f()

对于返回的函数,在将calc_prod赋值给f的时候并没有调用,只有下次使用的时候才会调用函数计算返回结果。 由于有延迟计算的功能,返回函数不要引用任何循环变量,或者后续会发生变化的变量。
**lambda **
lambda作为一个匿名函数,首先它是一个函数,这样使用的时候就可以调用他赋值给的另一个变量名作为函数变量名来使用,返回一个函数
p = lambda x,y:x+y print(p(4,6))

  1. lambda函数是匿名的:所谓匿名函数,通俗地说就是没有名字的函数。lambda函数没有名字。
  2. lambda函数有输入和输出:输入是传入到参数列表argument_list的值,输出是根据表达式expression计算得到的值。
  3. lambda函数一般功能简单:单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。
    原文链接:https://blog.csdn.net/zjuxsl/article/details/79437563

使用方法例如 lambda x,y:x*y 相当于定义了一个x乘y的函数
lambda:None;函数没有输入参数,输出是None
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
lambda **kwargs: 1;输入是任意键值对参数,输出是1

高阶函数中的装饰器
不带参数的decorator
作用:

打印日志:@log
检测性能:@performance
数据库事务:@transaction
URL路由:@post(‘/register’)

import time
def performance(f):
def t(x):
print time.time()
return f(x)
return t
@performance
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)

带参数的decorator:
还没看懂…放个链接…再回来看…
https://www.imooc.com/code/6066
py中的偏函数
https://www.imooc.com/code/6068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值