09function

本文最后更新于 2022-05-26 11:25:30

function 函数

函数的创建

def 函数名([输入参数]):
	函数体
    [return xxx]
def calc(a,b):
	c=a+b
	return c

函数参数传递

def func1(a, b):
    return a - b

# 根据位置传参
var1 = func1(1, 2)
print(var1) # -1

# 根据关键字传参
print(func1(b=1, a=2)) # 1

参数传递类型

def func2(arg1,arg2):
    print(arg1)
    print(arg2)
    arg2.append(1)
    arg1=1

var2= 11
var3=[11,22,33]
func2(var2,var3)
print(var2) # 基本类型传值(不可变类型) 没修改到
print(var3) # 传的地址(可变类型) 所以修改到了
# 11
# [11, 22, 33, 1]

函数返回多个值

def func3(num):
    odd=[]
    even=[]
    for i in num:
        if i%2:
            odd.append(i)
        else :
            even.append(i)
    return odd,even
print(func3([1,2,3,4,5,6,8,9]))
# 当返回多个参数时 封装成元组
# ([1, 3, 5, 9], [2, 4, 6, 8]) 

函数参数默认值

# 定义带默认值函数
def func4(a,b=10):
    return a+b


print(func4(10)) # b使用默认值
print(func4(10, 20))
# 20
# 30

可变位置形参

# 可变位置形参 封装成元组 类似于 java中...
def func5(*args):
    print(args)

func5(1)
func5(1,2)
func5(1,2,3)
# (1,)
# (1, 2)
# (1, 2, 3)

可变位置关键字形参

# 可变位置关键字形参 封装成字典
def func6(**args):
    print(args)

func6(a=1,b=2)
func6(kk=1,vv=1)
# {'a': 1, 'b': 2}
# {'kk': 1, 'vv': 1

多种可变类型形参组合

# 可变形参一个类型在一个方法里面只能有一个
# 不能同时有两个 * 或 ** 存在
def func7(*args1,**args2):
    print(args1)
    print(args2)

func7(1,2,3,a=11,b=22)
# (1, 2, 3)
# {'a': 11, 'b': 22}

将list转换为位置实参传入

func7(1,2,3,a=11,b=22)
# (1, 2, 3)
# {'a': 11, 'b': 22}

def func7(a,b,c):
    print(a,b,c)
    
lst=[1,2,3]
func7(*lst) 
# 在函数调用时,将列表中的每个元素转换为位置参数传入
# 如果不加* 就会认定为传入的lst为第一个参数a

将dict转为关键字实参传入

# 将字典中的键值对转换为关键字实参传入
# key必须和func7中形参的名称匹配
dic2={'a':1,'c':2,'b':3}
# func7(a=1,b=2,c=3)
func7(**dic2)

指定特定的参数使用关键字实参传递

def func8(a,b,*,c,d):
    print(a)
    print(b)
    print(c)
    print(d)

# c d必须使用关键字传参
func8(1,2,c=4,d=3)

变量作用域

var4 = 1  # 全局变量
age = 1 
def fun9(a, b):
    # 若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
    # 并且要在函数内部声明
    global age  # 将age声明为全局变量 age必须在外部有定义
    c = a + b  # c:局部变量

    age = c
    print(c)
    print(var4)

print(age)
# nonlocal关键字
# 使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量。
def func():
    name = 'pythontab'
    def foo():
        nonlocal name
        name = 'pythontab.com'
    foo()
    print(name)
func()
# pythontab.com

global和nonlocal区别

  • 两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)
  • 两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量

递归函数

# 递归函数
def func10(n):
    if(n==1):
        return 2
    else:
        return n*func10(n-1)
print(func10(10))

09function
https://jiajun.xyz/2020/10/26/python/01base/09function/
作者
Lambda
发布于
2020年10月26日
更新于
2022年5月26日
许可协议