3-python函数

1.函数基础

def p(): # 定义
    print("haha")
    
p() # 调用,输出haha
def max(a,b):
    if a>b:
        return a
    else:
        return b
c=max(7,5)
print(c) # 7

2.默认返回值为None

def f():
    print("1") # 输出:1
    # return None
a=f()
print(a) # 输出:None
print(type(a)) # 输出:<class 'NoneType'>
i=2
def f():
    if i==1:
        return 1
# else默认返回None
a=f()
print(a) # 输出None
i=2
def f():
    if i==1:
        return 1
    else:
        return # 可以只写return,同样返回None
# 不写(连同else)=return=return 0=return None,在判断语句均视为假
a=f() # 若return 0则a=0,其他为None
print(a) # 输出None

函数返回值为0或None在判断语句中表示假,其他表示真

i=2
def f():
    if i==1:
        return None
    else:
        return 5
a=f()
if a: # a为5,视为真,可进入if语句
    print("1") # 输出:1
i=2
def f():
    if i==1:
        return 5
    else:
        return None
a=f() # a为None
if not a: # not a为真,可进入if语句
    print("1") # 输出:1

None可用于声明无初始值的变量

a=None

3.通过函数修改全局变量的值
函数通常无法修改全局变量的值,因为在函数中修改此变量时又定义了新的局部变量,具有更高的优先级。但可以使用global声明为全局变量

a=1
def f():
    global a #global声明这是全局变量
    a=2
f()
print(a) # 输出:2

4.函数的规范化说明文档

在"“”“”"中
首行解释函数功能,其余解释各参数
:param 参数:解释

def max(a,b):
    """
    max是求最大值的函数(函数功能说明)
    :param a:  a表示其中的一个参数(依次解释)
    :param b:  b表示其中的另一个参数(依次解释)
    :return:   返回值为相加得到的结果(依次解释)
    """
    if a>b:
        return a
    else:
        return b
c=max(7,5)
print(c) # 7

鼠标停在调用处会显示说明文档
在这里插入图片描述
5.函数的嵌套

def a():
    print(1)
def b():
    print(2)
    a()
    print(3)
b()
"""
2
1
3
"""

6.形参和实参的内存地址

def f(a):
    print(id(a)) # 全局变量a的地址,形参和实参指向的是同一个对象
    a=10
    print(id(a)) # 新定义的局部变量a的地址,指向新的内存地址
a=1
print(id(a)) # 全局变量a的地址
f(a)
print(a)
"""
2403095937264
2403095937264
2403095937552
1
"""

7.参数换序(关键字参数)
通过 键=值 的形式传递参数

def f(name,age):
    print(f"name is {
      
      name}, age is {
      
      age}")
f("jack",18)
f(age=18,name="jack") # 换序需指定参数
"""
name is jack, age is 18
name is jack, age is 18
"""

未指明键的参数必须按序且必须在前(即位置参数必须在关键字参数前)
*位置参数:根据参数位置来传递参数(按序传入)

def f(name,age,word):
    print(f"name is {
      
      name}, age is {
      
      age},word is {
      
      word}")
f("jack",word="hehe",age="18")
"""
name is jack, age is 18,word is hehe
"""

8.默认参数(缺省参数)
默认参数必须在最后,可以不止一个

def f(name,age=18): # 默认age=18,有传入就更新
    print(f"name is {
      
      name}, age is {
      
      age}")
f(age=20,name="jack")
f(name="peter")
"""
name is jack, age is 20
name is peter, age is 18
"""

9.不定长参数(可变参数)
(1)位置传递
通过*以元组(后面讲到)形式导入,存放所有未命名的变量参数

def f(a,*b):
    print(a)
    print(b)
f(10,20,30,40)
"""
10
(20, 30, 40)
"""

(2)关键字传递
被传入数据当做字典(后面讲到)存在
必须通过 键=值 的形式传递参数

def f(**a):
    print(a)
f(name="jack",age=18,id=20)
# 输出: {'name': 'jack', 'age': 18, 'id': 20}

10.函数的多返回值
多返回值类型也可不同

def f1():
    return 1
    return 2
a=f1()
print(a) #输出1,只接收到第一个return
def f1():
    return 1,2
a,b=f1()
print(a,b) #输出1 2

11.函数作为参数传递

def f1(hanshu):
    result=hanshu(1,2)
    print(result)
def f2(x,y):
    return x+y
f1(f2) #输出:3

12.匿名参数
lambda可以创建匿名函数
格式:lambda 参数:函数体(一行代码)

x=lambda a:a+10
# 对参数a,执行a+10操作,x相当于函数名
print(x(5)) # 对x,传入参数5(a=5)
# 输出:15
sum=lambda a,b:a+b
# 对参数a,b,执行a+b操作
c=sum(2,3)
d=sum(4,5)
print(c,d,end=" ") # 5 9 
def f1(hanshu):
    result=hanshu(1,2)
    print(result)
def f2(x,y):
    return x+y
f1(f2) #输出:3
#----------------------------
#可以将以上函数改为 ↓
def f1(hanshu):
    result=hanshu(1,2)
    print(result)
f1(lambda x,y:x+y) #输出:3
# 在此方法中,没有建立f2执行两数相加的函数,因此lambda一般用于临时使用一次的代码

可以将匿名函数封装在一个函数内,这样可以使用同样的代码来创建多个匿名函数

def f(n): #实现n倍的a
    return lambda a: a*n
g1=f(2) # n=2, g1相当于通过计算得到的一个关于lambda的函数名g1,等待传入参数
g2=f(3) # n=3
print(g1(4)) # 8
print(g2(5)) # 15

猜你喜欢

转载自blog.csdn.net/weixin_45825865/article/details/129893699