函数

平常名利可以直接进行执行,但是有很大的局限性,比如,如果换了数据,或者换了参数,这时候就要进行重新编写。十分不方便,于是有了函数的加入。

def hello():
    print('hello')
    print('python')
# 通过函数名来调用函数
hello()

函数的用法 ,而且多变。
比如函数里面嵌套函数

def a():
    print('is test1')
    def b():
        print('is test2')
    b()
a()

上面的为不带参数的函数,同时还有带参数的函数。

def welcome(a):
    print('hello',a)
# 真实的数据信息,调用函数的时候传递的参数较实参
welcome('tom')
welcome('lily')

打印出来的结果为

hello tom
hello lily

位置参数:形参和实参数量必须保持一致

 def getInfo(name,age): # 按照位置传递参数
    print(name,age)
getInfo('aa',11)
getInfo(11,'aa')
getInfo(age=11,name='aa')

上面两种打印出来的效果是不同的,因为,只是按照位置在定位参数,没有进行指定。

#默认参数

def mypow(x,y=2):
    print(x**y)
mypow(2,3)
mypow(2)

在执行上面代码时,如果只输入一个参数,那么y默认的为2

#可变参数

def mysum(*args):
    print(*args)
    print(args)
    sum = 0
    for item in args:
        sum += item
    print(sum)
nums = [1,2,3,4]
nums1 = (1,2,3,4)
nums2 = {1,2,3,4}
mysum(1,2,3,4,5)
#参数解包 在参数名前加*
mysum(*nums)
mysum(*nums2)

#关键字参数
#**kwargs是一个字典 可以传递任意多个key-value

def getStuInfo(name,age,**kwargs):
    print(name)
    print(age)
    print(kwargs)
d = dict(a=1,b=2)
#如果要对字典进行解包 一个* 获取所有的key值
print(*d)
getStuInfo('westos',11,sex=1,score=100)

在写函数时,设置的变量只在当前函数中生效,
如果需要每一个都使用需要使用global进行声明。

a = 1
print('outside:',id(a))

def fun():
    global a #声明a为全局变量
    a = 5
    print('inside:',id(a))
fun()
print(a)
print(id(a))

高阶函数

map():接收两个参数,一个是函数 一个是序列
map将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回

#对一个序列[-1,3,-4,-5]的每一个元素求绝对值

print(list(map(abs,[-1,3,-4,-5])))

#对每个元素求阶乘

def f(x):
    """对x求阶乘"""
    res = 1
    for i in range(1,x+1):
        res = res * i
    return res

li = [random.randint(2,7) for i in range(10)]

print(list(map(f,li)))

reduce():把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4]) = f(f(x1,x2),x3),x4)

filter过滤函数
和map()类似的,也接收一个函数和一个序列
但是和map()不同的是,filter()把传入的函数依次作用于
每个元素,然后根据返回值是True或者False决定保留还是丢弃该元素

def isodd(num):
    if num % 2 == 0:
        return True
    else:
        return False
print(list(filter(isodd,range(100))))#将偶数输出,即将返回True的值进行输出。

匿名函数的关键字为 lambda
冒号前面是 形参 冒号后面是返回值

print(list(filter(lambda x:x%2==0,range(10))))##输出偶数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值