Python函数

python函数



函数定义

使用 def 关键字进行函数定义,参数列表类似C++,按顺序进行传递,注意Python的参数是不需要进行类型申明的,使用函数一定注意参数顺序

def Hello(name , greet): 
    print(f'Hello {name}, {greet}')

Hello('Xiaoxiao','You are cute')

运行结果如下:

Hello Xiaoxiao, You are cute

Python在传递实参时可以指定形参,这样就可以无视参数顺序了

def Hello(name , greet): 
    print(f'Hello {name}, {greet}')

Hello(greet='You are cute',name='Xiaoxiao')

运行结果如下:

Hello Xiaoxiao, You are cute

函数返回值

Python函数定义不需要指定返回类型,可以有返回值也可以没有,而且可以在一个函数内返回多个数据类型的返回值

def Hello(name , greet):
    if(name=='Xiaoxiao'): 
        print(f'Hello {name}, {greet}')
        return 'yeahyeah Xiaoxiao!'
    else:
        print(f'{name}? Who are you?')
        return False;

print(Hello(greet='You are cute',name='Xiaoxiao'))
print(Hello(greet='NULL',name='Haohao'))

运行结果如下:

Hello Xiaoxiao, You are cute

yeahyeah Xiaoxiao!

Haohao? Who are you?

False


函数参数

与C++不同,Python中的参数传递时传递的全部都是引用。但请注意Python的重要特性,在对变量进行赋值操作时,一定会建立一个新副本。即虽然函数参数传递的全部都是引用,但在函数内部进行初始化操作时,依然执行的是新建副本操作,不会影响本体。你可以在接下来的代码展现的地址中直观的看出来

#基础数据类型是这个逻辑
def Hello(name):
    print(f'函数接收到了参数的引用,因此地址与原变量相同:{id(name)}')
    name='Xiaoxiao'
    print(f'初始化操作新建了副本,因此地址改变:{id(name)}')

name='Haohao'
print(f'原变量地址{id(name)}')
Hello(name)
print(f'原变量没有受影响{name}')

#容器也是一样的逻辑
def changeList(list):
    list.clear()
    print(f'函数接收到了参数的引用,因此地址与原变量相同:{id(list)},并且本体受到影响:{list}')
    list=[3,2,1]#在函数内部进行赋值操作却不会影响本体
    print(f'函数内部进行赋值操作后的列表{list},地址已发生改变:{id(list)}')
    
list=[1,2,3]
print(f'原变量地址{id(list)}')
changeList(list)
print(f'函数外部的列表受了clear方法影响,但未受赋值操作影响:{list},地址与原变量相同:{id(list)}')

运行结果如下:

原变量地址1598346997616

函数接收到了参数的引用,因此地址与原变量相同:1598346997616

初始化操作新建了副本,因此地址改变:1598347133680

原变量没有受影响Haohao

原变量地址1598346323392

函数接收到了参数的引用,因此地址与原变量相同:1598346323392,并且本体受到影响:[]

函数内部进行赋值操作后的列表[3, 2, 1],地址已发生改变:1598346471104

函数外部的列表受了clear方法影响,但未受赋值操作影响:[],地址与原变量相同:1598346323392

Python允许传递任意数量的参数,此时需要以 *形参名 的格式定义参数,该方式使得函数定义一个元组用以收纳即将传入的任意数量参数

在使用这种语法时,记得将该参数放在其余正常参数之后

def make_pizza(size,*toppings):
    print(f"Making a {size}-inch pizza with the following toppings:")
    for topping in toppings: 
        print(f"- {topping}")

make_pizza(16,'mushroom','green peppers','extra cheese')

运行结果如下:

Making a 16-inch pizza with the following toppings:

- mushroom

- green peppers

- extra cheese

关键字实参也可以通过该方法进行传递任意数量,使用 *形参名* 使得函数定义一个字典用以接收任意数量的关键字实参

posted @ 2026-01-25 20:28  DuckingWJ  阅读(0)  评论(0)    收藏  举报