函数是一种被设计用于完成指定任务的可重用代码块。Python中函数的传参是函数和程序中必不可少的一部分。本文将详细介绍Python函数传参的各种方法和规则,为您带来更好的编程体验。
一、Python函数大全
Python是一种高级的、解释性的、交互性的编程语言。Python有强大的标准库,其中包含大量的内置函数,如print()、len()、str()、等等,这些函数均已经预定义。
print("Hello world!") len("abc") str(123)
自定义函数是使用def语句实现的。定义函数时,必须指定函数名称和要完成的任务。此外,还可以根据需要定义一个或多个参数,用于接收外部数据。
def add(x,y): return x + y
二、Python调用函数传参
函数调用时,可以将实际参数传递给形式参数。Python函数调用时,参数传递是通过位置或关键字来完成的。本章将详细介绍这两种方式。
1、位置参数传递
位置参数是函数调用中最简单的参数类型。它们按顺序依次排列,函数将按相同的顺序接收它们。位置参数是通过它们在函数定义中的相对位置来标识的。
def desc(name,age): print("姓名: ",name) print("年龄: ",age) desc("张三",18)
在上面的例子中,desc()函数定义了两个位置参数name和age,在函数调用时传递了两个实际参数"张三"和18,函数将按照位置接收它们。输出结果如下:
姓名: 张三 年龄: 18
2、关键字参数传递
关键字参数是在函数调用时使用名称传递的。使用关键字参数时,参数顺序是无关紧要的,每个参数使用名称和值来指定。
def desc(name,age): print("姓名: ",name) print("年龄: ",age) desc(name="李四",age=20)
在上面的例子中,使用关键字参数将实参“李四”和20传递给desc()函数。函数会根据形参的名称接收参数,因此位置顺序不是必要的。输出结果如下:
姓名: 李四 年龄: 20
三、Python函数用法
Python的函数用法灵活多变,并支持多种写法,本章将详细介绍其用法,包括使用默认参数、可变参数和关键字参数。
1、使用默认参数
当一个函数的参数有默认值时,调用该函数时可以不传递这个参数。如果用户传递了这个参数,那么默认值将被覆盖。
def show(name, gender="男"): print(name, gender) show("张三") # 输出:张三 男 show("李四", "女") # 输出:李四 女
在上面的例子中函数show()有两个参数——“name”和“gender”,其中“gender”定义了默认值“男”。在第一个show()函数调用中,只有名字参数被传递,因此默认值自动应用。在第二个show()函数调用中,一个不同的性别参数“女”被传递,并且覆盖了默认值。输出结果分别是:“张三 男”和“李四 女”。
2、可变参数
如果您不确定函数将接收多少个参数,那么可以使用可变参数。Python提供了两种可变参数形式:命名参数和不命名参数。
不命名参数
使用星号来收集不命名参数,星号允许函数接受任意数量的参数,并将它们作为一个元组传递。
def f(*args): for arg in args: print(arg) f(1, 2, 3) # 输出:1 2 3 f("a", "b", "c") # 输出:a b c
命名参数
使用双星号来收集命名参数,双星号允许函数接受任意数量的关键字参数,并将它们作为一个字典传递。
def f(**kwargs): for key, value in kwargs.items(): print(key, value) f(a=1, b=2) # 输出:a 1,b 2
3、关键字参数
Python函数支持的另一种形式是关键字参数。通过使用关键字和值来表示函数中变量可以使代码更加容易阅读和使用。
def f(x=0, y=0, z=0): print(x, y, z) f(y=2, x=1) # 输出:1 2 0
在上面的例子中,因为参数设置了默认值,调用可以省略这些参数。在本例中,函数“f”有三个具有默认值0的参数。调用“f(y=2, x=1)”将设置x=1,然后y=2将覆盖第二个参数。输出结果为:“1 2 0”。
四、Python函数的参数详解
Python函数的参数规则是复杂的,调用函数时程序运行将按照以下规则进行处理:
1、必需参数
必需参数是最简单的参数类型,函数在调用时必须传递这些参数。如果调用函数时缺少必需参数,程序将报错。
def add(x, y): return x + y add(2, 3)
2、关键字参数
与位置参数不同,使用关键字参数时没有位置需求,因为Python解释器将根据参数名称在函数定义中进行匹配。
def show(name, age): print("姓名: ",name) print("年龄: ",age) show(age=18, name="张三")
3、默认参数
默认参数在没有传递实际参数时将使用的一组参数。如果没有在函数定义中设置默认参数,则必须提供所有参数,否则将会报错。
def add(x=0, y=0): return x + y add()
4、不定长参数
不定长参数,即能够接受任意数量的参数,包括零个或多个参数。Python将这些参数组装成一个元组或字典,具体取决于参数定义的方式。
def print_data(*data): for i in data: print(i) print_data(10,20,30)
五、Python函数传参方法
当在函数调用中传递参数时,可以按值或参考传递参数。这就涉及到传递可变对象、不可变对象以及参数的数据类型。
1、传递不可变对象
不可变类型的数据如字典、元组、字符串等,函数调用时会传递这些对象的拷贝,原来的变量不会改变。
def change(x): x = 10 print(x) a = 5 change(a) print(a)
在上面的例子中,函数change()接收一个参数x,并将其更改为10。原变量的值被分配给函数参数x,因此通过函数更改x没有改变原变量的值。
2、传递可变对象
可变对象是与不同的内存地址相关联的。在函数中更改可变对象的值将影响到原始对象。
def change(list1): list1.append([1,2,3]) print(list1) list = [10, 20, 30] change(list) print(list)
在上面的例子中,函数change()接收一个列表参数list1,并将值[1,2,3]附加到该列表中。由于列表是可变变量,在函数中对它的更改也会影响到函数外的原始列表。
六、Python主函数传参
主函数传入参数时可以调用其他函数,以及使用Python的argparse关键字库。argparse帮助创建具有清晰的命令行用法并自动生成帮助文档的程序。
import argparse def add(x, y): return x + y if __name__ == '__main__': parser = argparse.ArgumentParser(description="Add Two Numbers") parser.add_argument("-x", type=int, help="Enter First Number", required=True) parser.add_argument("-y", type=int, help="Enter Second Number", required=True) args = parser.parse_args() result = add(args.x, args.y) print(f"The Result is {result}")
在上面的例子中,主函数中使用了参数解析器argparse库,从命令行获取两个整数参数。这两个参数传递给了add()函数,并将计算结果输出到控制台。
七、Python求函数最小值
使用Python来计算函数的最小值有多种方法,本章将展示如何运用scipy.optimize中的minimize()函数来求解。
import numpy as np from scipy.optimize import minimize def Rosen(x): return np.sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0) if __name__ == "__main__": x0 = [-1.2, 1.0, 1.0, -1.2] result = minimize(Rosen, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True}) print(result)
在上面的例子中,定义了一个函数Rosen,该函数使用Rosenbrock函数计算数学最小值。使用小初始点[-1.2, 1.0, 1.0, -1.2]并使用Nelder-Mead(单纯形)传递这个函数,以计算最小值。该函数使用Python库的优化程序来执行计算,并输出结果。
八、Python函数传入字典参数
Python函数可以接受包含关键字和值的字典参数。下面的示例演示了如何在函数中书写和使用这些参数。
def print_dict_data(**kwargs): for key, value in kwargs.items(): print(key, value) person1 = {"name": "张三", "age": 18, "gender": "男"} person2 = {"name": "李四", "age": 20, "gender": "女"} print_dict_data(**person1) print_dict_data(**person2)
使用两个字典对象person1和person2,并传递给print_dict_data()函数。函数使用双星号操作符接受这些字典参数,并在for循环中打印输出。
九、Python函数参数传递规则
Python函数参数传递遵循以下规则:
1、实参和形参在数量上必须对应
函数调用和定义必须有相同数量的参数。
def add(x