python 参数传递
2021/7/29 22:08:10
本文主要是介绍python 参数传递,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在 python 中,类型属于对象,变量是没有类型的:
a = [1, 2, 3] a = 'Runoob'
以上代码中,[1, 2, 3]是 list 类型,'Runoob' 是 String 类型,而变量 a 是没有类型,它只是一个对象的引用(一个指针),可以是 list 类型对象,也可以是 String 类型对象。
1.可更改(mutable)与不可更改(immutable)对象
在 python 中, string, tuples,和 numbers 是不可更改对象,而 list, dict 是可修改对象。
python 函数的参数传递:
- 不可变类型:类似 c++ 的值传递,如整数、字符串、元组。如 fun(a), 传递的是 a 的值,没有影响 a 对象本身。如果在fun(a)内部修改 a 的值,则是新生成一个 a 的对象。
- 可变类型:类似 c++ 的引用传递,如列表、字典。如 fun(la) ,则是将 la 真正传过去,修改后 fun 外部的 la 也会受到影响。
python中一切都是对象,严格意义不能说是值传递还是引用传递,应该说传不可变对象和可变对象。
2.python传不可变对象实例
通过 id() 函数查看内存地址变化:
def change(a): print(id(a)) a = 10 print(id(a)) a = 1 print(id(a)) change(a)
140703710290320 140703710290320 140703710290608
可以看到在调用函数前后,形参和实参指向同一个对象(对象 id 相同),在函数内部修改形参后,形参指向的是不同的 id。
3.传可变对象实例
可变对象在函数里修改了参数,那么在调用这个函数,原始的参数也被改变了。例如:
def changeme(mylist): '修改传入的列表' mylist.append([1, 2, 3, 4]) print('函数内取值:', mylist) return # 调用changeme函数 mylist = [10, 20, 30] changeme(mylist) print('函数外取值:', mylist)
传入函数和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:
函数内取值: [10, 20, 30, [1, 2, 3, 4]] 函数外取值: [10, 20, 30, [1, 2, 3, 4]]
4. 参数
参数类型:
- 必须参数
- 关键字参数
- 默认参数
- 不定长参数
必须参数
必须参数必须以正确的顺序传入函数。调用时的数量必须和声明的一样。
调用 printme() 函数,必须传入一个参数,不然会出现语法错误:
def printme(str): '打印任何传入的字符串' print(str) return # 调用 printme 函数,不加参数会报错 printme()
TypeError: printme() missing 1 required positional argument: 'str'
关键字传参
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明不一致,因为 python 解释器能用参数名匹配参数值。
def printme(str): # 打印任何传入的字符串 print(str) return # 调用printme函数 printme(str = '爱你呦')
爱你呦
默认参数
如果没有传递参数,则使用默认参数。
def printinfo(name, age=35): "打印任何传入的字符串" print ("名字: ", name) print ("年龄: ", age) return #调用printinfo函数 printinfo( age=50, name="runoob" ) print ("------------------------") printinfo( name="runoob" )
名字: runoob 年龄: 50 ------------------------ 名字: runoob 年龄: 35
不定长参数
有时需要一个函数能处理比当初声明时更多的参数。不定长参数声明时不会命名。
加了*
号的参数以元组(tuple)、列表的形式导入。
def printinfo( arg1, *vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vartuple) # 调用printinfo 函数 printinfo( 70, 60, 50 )
输出: 70 (60, 50)
如果在函数调用时没有指定参数,他就是一个空元组。也可以不向函数传递未命名的变量。
def printinfo( arg1, *vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) for var in vartuple: print (var) return # 调用printinfo 函数 printinfo( 10 ) printinfo( 70, 60, 50 )
输出: 10 输出: 70 60 50
两个**
的参数以字典的形式导入。
def printinfo( arg1, **vardict ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vardict) # 调用printinfo 函数 printinfo(1, a=2,b=3)
输出: 1 {'a': 2, 'b': 3}
星号*
单独出现,参数必须以关键字传入。
>>> def f(a,b,*,c): ... return a+b+c ... >>> f(1,2,3) # 报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given >>> f(1,2,c=3) # 正常 6 >>>
这篇关于python 参数传递的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器