python系列之 - 函数

函数,就是将具有一定功能的代码块放在一起,并起一个名称,在需要使用此功能模块的时候直接调用该名称即可.通过使用函数可以减少代码的重复使用率,并增加代码的可维护性、可看性。python函数python的函数主要包括两大部分: 内置函数、自定义函数

1.定义函数

函数定义
def 函数名(args参数):
    
    函数体

 函数定义中的args参数表示形参,实际调用时传入的参数为实参。

动态参数
函数的参数可以是指定个数的参数,也可以是动态的参数。
def func(*args,**kwargs):
    print(args)
    print(kwargs)

func(11,22,33,name='super',age=22)
如上,在定义函数的时候,在形参前面加上一个 星号(*),此参数即可接收变长的实参。函数将自动的将多个实参转换为元组。对于key=value形式的实参将自动作为字典类型保存到形参kwargs中。
(11, 22, 33)
{'age': 22, 'name': 'super'}
当然我们也可以直接传递列表或字典,
def func(para,*args,**kwargs):
    print(para)
    print(args)
    print(kwargs)

li = [11,22,33]
dic ={'k1':'aaa','k2':'bbb'}
func('a',*li,**dic)
在传递列表或元组的参数时,必须对传递的实参也加上星号(*),对于字典的实参加上两个星号(**),
a
(11, 22, 33)
{'k2': 'bbb', 'k1': 'aaa'}

2.内置函数

python内部提供了很多供我们使用的函数,常用函数如下:
abs(x)
返回数字的绝对值,参数可以是整数、也可以是浮点数。如果是复数,则返回它的大小
all(iterable)
对参数中的所有元素进行迭代,如果所有的元素都是True,则返回True,函数等价于
def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
any(iterable)
对参数中的所有元素进行迭代判断,只要一个元素为真,函数返回True。函数等价于
def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
assert
断言, 该函数属于一个单元运算的表达式。类似于lambda。但功能与 if...not类似。如果你能确定你的表达式一定为真可以使用。如果表达式为假则返回一个 AssertionError 错误
程序立即中断
a = 1
assert a >= 1, "Error value"
print("OK")
结果:
OK
a = 1
assert a >= 2, "错啦!"
print("OK")
结果:
AssertionError: 错啦!     print()函数不会执行

bin(x)
将一个十进制数转换为一个二进制字符串.
bool([x])
对列表[x]中的所有值进行bool判断,当列表中所有的元素都为True时则返回True,否则返回False,能返回False的值类型有:‘’,None,0,(),[],{}。与all()函数类似

print(bool(['a',1,2.4]))  # True
print(bool(None))  # False
print(bool(()))  # False
print(bool([]))  # False
print(bool({}))  # False
print(bool(''))  # False
print(bool(0))   # False
callable(object)
检查对象object是否可调用,可以被调用返回True,否则返回False:1、函数、类是可以被调用的;2、实例是不可以被调用的,除非类中声明了__call__方法
def func1():
    print('a')
a = '123'
print(callable(a))  # False
print(callable(func1))  # True
divmod(x,y)
返回x/y的商和余数,结果为元组类型
print(divmod(5,3))  # (1, 2)
ord(c)
返回字符c的ASCII码,x为字符,返回数字型
print(ord('a'))  # 97
chr(x)
返回ASCII码x对应的字符, x 为整型,返回字符
print(chr(97))   # 'a'

classmethod(function)
在定义的类中为函数返回一个类方法,主要功能:1、注解,用来说明这个方式是个类方法;2、类方法即可被类调用,也可以被实例调用;3、类方法类似于Java中的static方法;4、类方法中不需要有self参数
 enumerate(iterable, start=0)

 返回一个可枚举的对象。该对象的next()方法将返回一个tuple.start为开始的序号默认从0开始。或者也可以通过list 或 tuple来转换

print(list(enumerate(('aa','bb','cc'),start=2)))

等价于

def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1

eval(expression)
计算表达式expression的值

lambda
lambda并不是python的内置函数,而是一个函数表达式
f_lam = lambda x: x * 2
print(f_lam(10))  # 20
map(function, iterable, ...)
将传入的列表中的每个值进行一次函数运算,python3.x中返回的为 <map object at 0x006AFA30>对象,要获取值需要用list 或 tuple转换
li = (1, 2, 3, 4)
f_map = map(lambda x: x + 3, li)
print(f_map)          # python2.x结果[4, 5, 6, 7]
print(list(f_map))    # python3.x结果[4, 5, 6, 7]
max(iterable, *[, key, default])
对一个列表或元素的数据进行迭代,返回最大值.可以通过制定函数来判断
def func(i):
    t = divmod(i,3)
    return t[1]

li = (1,5,3,2,9,19,24)
print(max(li))             # 24
print(max(li,key=func))    # 5 对li中的数据进行取模后的最大值

max(iterable, *[, key, default])
与max()类似,取最小值
sorted(iterable[, key][, reverse])
对参数中的元素进行排序,默认从小到大排序。可以指定排序计算方法key=function,是否倒序排列reverse=True

def func(i):
    t = divmod(i,3)
    return t[1]

li = (1,5,3,2,9,19,24)
print(sorted(li))
# [1, 2, 3, 5, 9, 19, 24]
print(sorted(li,reverse=True))
# [24, 19, 9, 5, 3, 2, 1]
print(sorted(li,key=func))
# [3, 9, 24, 1, 19, 5, 2]
print(sorted(li,key=func,reverse=True))
# [5, 2, 1, 19, 3, 9, 24]
filter(function, iterable)
和map的执行方式一样,对于一个迭代器iterable的元素进行function计算,将计算的结果进行过滤,符合表达式结果的才返回.在python3.x中返回的结果为<filter object at 0x021CA610>对象,要获取值需要用list 或 tuple转换。
f_filter = filter(lambda x: x > 30, map(lambda y: y * 10, li))
print(f_filter)         # python2.x结果[40]
print(list(f_filter))   # python3.x结果[40]
zip(*iterables)
将两个元组或列表的值进行合并成一个新的列表.
a = (1, 2, 3)
y = [6,7,8]
# print(zip(a, y))  # [(1, 6), (2, 7), (3, 8)]
isinstance
isinstance(obj,obj2)  返回obj对象是不是由obj2创建的,或者 obj对象是 obj2 对象的基类创建的
a = 1
print(isinstance(a,int)) # True
class A(object):
    pass

class B(A):
    pass

b = B()
print(isinstance(b, B))  # True
print(isinstance(b, A))  # True
issubclass
issubclass(C,B)  判断类C是不是类B的子类
class A(object):
    pass

class B(A):
    pass

print(issubclass(B,A))
print(issubclass(A,object))

filter
对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回:
>>> def f(x): return x % 2 != 0 and x % 3 != 0 
>>> filter(f, range(2, 25)) 
[5, 7, 11, 13, 17, 19, 23]
>>> def f(x): return x != 'a' 
>>> filter(f, "abcdef") 
'bcdef'

map
对sequence中的item依次执行function(item),见执行结果组成一个List返回:
>>> def cube(x): return x*x*x 
>>> map(cube, range(1, 11)) 
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
>>> def cube(x) : return x + x 
... 
>>> map(cube , "abcde") 
['aa', 'bb', 'cc', 'dd', 'ee']
另外map也支持多个sequence,这就要求function也支持相应数量的参数输入:
>>> def add(x, y): return x+y 
>>> map(add, range(8), range(8)) 
[0, 2, 4, 6, 8, 10, 12, 14]


reduce
对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用,例如可以用来对List求和:
>>> def add(x,y): return x + y 
>>> reduce(add, range(1, 11)) 
55 (注:1+2+3+4+5+6+7+8+9+10)
>>> reduce(add, range(1, 11), 20) 
75 (注:1+2+3+4+5+6+7+8+9+10+20)


官方文档:https://docs.python.org/3/library/functions.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值