python函数

函数运行步骤

#密码输入程序
#调用程序在调用处暂停执行;
#调用时将实参赋到函数的形参;
#执行函数体语句;
#函数调用结束给出返回值,程序回到调用前的暂停处继续执行。

# 有默认值参数必须放在最后面!

def happy(a,b):
    print(a+b)
def new(a,b=2):
    print(a*b)

#    * 创建函数

def fun(x,*y):
    print(y)
    print(min(y))
    for i in y:
        x+= i
        return x

#    *分解集合


def fun(a,b,c):
    print(a+b+c)
arg=(1,2,3)

# 函数调用函数

def fun1(x):
    return x*x
def fun2(x,fun):
    return fun(x)

#函数调用后默认返回none
def fun(s):
    c=s+1 
    
#多个return
def fun(l):
    if len(l)>2:
        return l[0:2]
    else:
        return l
    print(fun([1,23,4]))
    print(fun([1,2]))
    print("lisi")
    
#lambda 匿名函数
s=lambda x,y,z:x*y*z
s(1,2,3)


#lambda 函数练习
a=[1,2,3,4]
b=[5,6,7,8]
print(list(map(lambda x,y:x+y,a,b)))


 #map函数 map(函数f(x),变量x)
m1=map(lambda x:x*x,[y for y in range(5)])

#python 生成器 yeild
()
#pyrhon 迭代器
[]

#编写一个函数,接收N个数字,求这些参数数字的和。

def func(*s):
    print(s)#看看s长啥样
    m=0
    for i in s:
        m += i
    print(m)
func(1,2,3,4,5)

知识扩展

包裹传递

包裹传递也称为不定参数传递,用于在定义函数时不能确定函数调用时会传递多少个参数时使用。函数每次调用时,传递的参数数量可以不同。

  1. 当传入参数是位置传递时,所有传入参数被收集打包合并成一个元组,再传递给函数。

In [4]:

def add(*number):
    """接收不确定数量位置传递的参数,合并为一个元组number在函数体内使用"""
    print(number)  # 查看参数类型,元组
    result = 0
    for i in number:
        result = result + i
    return result
​
​
if __name__ == '__main__':
    print(add(1, 3, 5, 7, 9))
    print(add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

 
  1. 当传入参数是关键字传递时,所有传入的关键字参数被收集打包合并成一个字典,再传递给函数。

In [5]:



def add(**number):
    """接收不确定数量的关键字参数,合并为一个字典number在函数体内使用"""
    print(number)
    return sum(number.values())
​
​
if __name__ == '__main__':
    print(add(a=1, b=3, c=5))
    print(add(m=1, n=2, o=3, p=4, q=5, i=6, j=7, k=8))
​

解包裹传递

“*”“**”也可以以函数调用时使用,此时称为解包裹传递。

In [3]:


def add(a, b, c):
    """接收三个位置传递参数,返回其加和"""
    return a + b + c
​
​
if __name__ == '__main__':
    num1 = (1, 3, 5)
    print(add(*num1))
    num2 = {'a': 1, 'b': 2, 'c': 3}
    print(add(**num2))

函数调用总是会给形参列表中列出的所有形参赋值,或是用位置参数,或是用关键字参数,或是用默认值。 如果存在 "identifier" 这样的形式,它会被初始化为一个元组来接收任何额外的位置参数,默认为一个空元组。 如果存在 "**identifier" 这样的形式,它会被初始化为一个新的有序映射来接收任何额外的关键字参数,默认为一个相同类型的空映射。
在 "
" 或 "*identifier" 之后的形参都是仅限关键字形参因而只能通过关键字参数传入。
在 "/" 之前的形参都是仅限位置形参因而只能通过位置参数传入。

-----------------------仅个人见解,整理的学习资料,扩展资料来自赵广辉老师------------------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值