Python-函数入参和全局变量

  • 0 前言
  • 1 函数入参
    • 1.1 位置参数
    • 1.2 默认参数
    • 1.3 可变参数
    • 1.4 关键字参数
    • 1.5 命名关键字参数
  • 2 不可变参数和可变参数
    • 2.1 不可变参数
    • 2.2 可变参数
  • 3 全局变量
    • 3.1 使用本文件中全局变量
    • 3.2 使用下层文件的全局变量

0 前言

>>返回Python系列文章目录<<

1 函数入参

1.1 位置参数

Python函数的位置参数和其他语言一样,实参和形参的顺序和数量必须完全一致。但是因为Python是动态语言,对入参没有数据类型检查

def sum(a,b):s=0s=a+breturn ss=sum(1,2)  #必须要给a,b参数赋值,不然报错
print(s) #结果为3

1.2 默认参数

默认参数就是在定义函数的时候给变量一个默认值,调用该函数时,如果没有赋值,就使用默认值

默认参数必须在所有位置参数之后,只有当Python对应好所有位置参数后,才将剩下的作为默认参数

def sum(a=10,b=8):s=0s=a+breturn s#调用方式1:给a,b传入参数10,20
s2=sum(10,20)
print(s2)  #打印结果:30#调用方式2:给a传入100,b不赋值
s3=sum(100)
print(s3) #打印结果:108#调用方式3:不给变量赋值,a,b使用默认值10和8
s1=sum()
print(s1)  #打印结果:18

1.3 可变参数

当函数设计时不确定会输入多少个参数,可使用可变参数,函数将所有入参打包为一个元组使用

可变参数习惯上都命名为*args,在函数内部使用时,将args视为元组

Python中可使用*将序列型数据拆解成多个变量,因此,有时会看将*var型的实参

def sum(*args):s=0for x in args:s=s+xreturn ss1=sum(10,20)
print(s1) #打印结果:30a = 10
b = 20
s2=sum(a, b)
print(s2) #打印结果:30a = [10, 20]
s3=sum(*a)  # 序列拆解
print(s3) #打印结果:30

1.4 关键字参数

关键字参数允许在调用时以key=value形式传入0个或多个参数

关键字参数习惯上都命名为**kwargs,在函数内部使用时,将kwargs视为字典。对字典进行遍历,相当于对字典的key进行遍历

def sum(**kwargs):s = 0for k in kwargs:s = s + kwargs[k]return s#写法1:传入键值 K:V形式
s = sum(num1=10, num2=20)
print(s)  #打印结果: 30

1.5 命名关键字参数

命名关键字参数在关键字参数的基础上限制传入的的关键字的变量名,在输入参数时,必须带有参数名

def divide(num1, num2):return num1/num2s = divide(num1=20, num2=10)
print(s)  #打印结果: 2.0s = divide(num2=20, num1=10)
print(s)  #打印结果: 0.5

命名关键字参数在函数定义时表达方式和默认参数完全一致,为帮助编辑器区分,命名关键字参数必须写在所有位置参数和默认参数后面,中间只要有一个*分割(如果没有*args**kwargs,则必须手动补一个*

# args是变长参数,而city和job是命名关键字参数
def sum(name, age, *, city, job):# codesum(10, 20, city=30, job=40)

2 不可变参数和可变参数

Python中将数据类型分为不可变参数和可变参数

2.1 不可变参数

不可变参数包括数值字符串元组类型数据,具有以下特性:

  • 变量在new=old赋值时,新变量会开辟一片新的内存存放值,对新变量的改动不影响老变量,使用new == old返回False
  • 不可变参数作为函数入参时,同赋值操作一样,开辟新的内存,函数内入参和函数外没有关系
def test(x):x = x + 1x = 0
test(x)
print(x)  #打印结果:0
def test(x):x = x + 'b'x = 'a'
test(x)
print(x)  #打印结果: 'a'
def test(x):x = 0x = (1, 2)
test(x)
print(x)  #打印结果: (1, 2)

2.2 可变参数

可变参数包括列表集合字典类型数据,具有以下特性:

  • 变量在new=old赋值时,新变量和老变量指向同一个内存地址,对新变量的改动会影响老变量,使用new == old返回True
  • 可变参数作为函数入参时,同赋值操作一样,操作同一片内存,函数内入参和函数外有关系
def test(x):x.append(3)x = [1, 2]
test(x)
print(x)  #打印结果: [1, 2, 3]
def test(x):x.add(3)x = {1, 2}
test(x)
print(x)  #打印结果:{1, 2, 3}
def test(x):x.update({'c':3})x = {'a':1, 'b':2}
test(x)
print(x)  #打印结果:{'a': 1, 'b': 2, 'c': 3}

3 全局变量

3.1 使用本文件中全局变量

全局变量定义在import下面,函数中使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字。如:

a = 1
b = [2, 3]def func():if a == 1:print("a: %d" %a)for i in range(4):if i in b:print("%d in list b" %i)else:print("%d not in list b" %i)if __name__ == '__main__':func()

修改全局变量,需要使用global声明,所以通常定义一个函数,专门用来修改全局变量

num = 1# 定义一个函数,修改全局变量
def set_num(value):global numnum = value

3.2 使用下层文件的全局变量

本文件定义的全局变量无法被其它文件访问,只能提供get/set方法来变相传递

test1.py中的代码:

# 定义全局变量
num = 1# 设置变量值
def set_num(p):global numnum = p# 获取变量值
def get_num():return num

test2.py中的代码:

import test1# 借助方法来访问其它文件中的变量
def get_int():n = test1.get_num()test1.set_num(10)

Python-函数入参和全局变量相关推荐

  1. python函数入参和返回值

    以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3-function.html ...

  2. c语言函数参数从右往左,C语言函数入参压栈顺序为什么是从右向左?

    看到有人提问到,在处理printf/cout时,压栈顺序是什么样的?大家都知道是从右往左,也就是说从右往左的计算,但是,这里的计算不等于输出. a++和++a的压栈的区别:在计算时,遇到a++会记录此 ...

  3. assert函数_悉数Python函数传参的语法糖

    TIOBE排行榜是程序开发语言的流行使用程度的有效指标,对世界范围内开发语言的走势具有重要参考意义.随着数据挖掘.机器学习和人工智能相关概念的风行,Python一举收获2018年年度语言,这也是Pyt ...

  4. C/C++三种函数入参方法

    C/C++三种函数入参方法 函数是一组一起执行一个任务的语句.每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 您可以把代码划分到不同的函数中.如 ...

  5. Python 函数传参详解

    Python位置传参 位置传参也称为必备参数,必须按照正确的顺序将参数传递到函数中,定义函数时的参数与实际传入的参数数量必须保持一致 正常如下: def par(A,B):return A+B pri ...

  6. python3 全局变量 局部变量_python3 函数传参练习 全局变量与局部变量 的理解

    额 还是继续抄一边NLP第二条: 2.一个人不能控制另外一个人 一个人不能改变另外一个人,一个人只能改变自己. 每个人的信念,价值观,规条系统只对本人有效,不应强求别人接守. 改变自己,别人才会有可能 ...

  7. Python函数传参方式超级大汇总

    位置参数 位置参数传递是最为简单的传递方式,按照函数参数的位置顺序逐个匹配传入,传入参数的个数必须与函数参数个数一致. 见示例1,根据位置顺序进行匹配,a,b,c分别赋值为2,3,4 示例1 def ...

  8. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  9. python函数的入参和传参

    https://www.bilibili.com/video/BV1k7411W78H # 1.位置参数 def calc(a, b, c):print(a + b * c)calc(1, 2, 3) ...

最新文章

  1. Struts2_中文问题
  2. ALV输出的时候,输出字段内容前面的空格
  3. win7(64)与samba不兼容
  4. 初学Web前端开发,你需要掌握的11项技能
  5. java web 截图_如何以Java实现网页截图技术
  6. 【Ynoi2011】成都七中【树论】【点分树】【离线】【树状数组】
  7. 手把手教你解密MacOS平台下的Chrome密码
  8. 求最长XX序列的两种方法
  9. [Elasticsearch2.x] 多字段搜索 (二) - 最佳字段查询及其调优 译
  10. iOS 处理后台返回的json(或NSDictionary)形式字符串
  11. python交互式换行_如何在Python中进行换行(换行)?
  12. CompoundButton 选中/未选中状态的按钮
  13. ajax 七牛云上传图片,学习笔记:利用七牛云上传图片小结
  14. 计算机用户名uz,Dnuznq全国计算机二级考试vb试题.doc
  15. 获取google chrome浏览器的安装位置
  16. 盘点微软使用火热的编程语言!程序员:你看我还有机会吗?
  17. 交通元宇宙的技术与应用(附下载)
  18. QML控件类型:Tumbler
  19. Keven 有一个矩形,长为 aa,宽为 bb,他希望将三个边长相等并且边长是正整数的正方形(牛客网题目)
  20. Creator 2.4.1 更新说明,新增对接华为 AppGallery Connect

热门文章

  1. ★戏子入画、一生天涯
  2. 按钮模式来自官方的 windows 7 快捷键大全
  3. Elasticsearch高级(Shards、高可用集群搭建)
  4. 计算机大赛搞笑队名,电子设计大赛队名
  5. AndroidStudio 模拟器一直黑屏或者处于离线状态
  6. 数据沼泽_数据湖:只是一片沼泽,没有数据治理和目录
  7. 【tensorflow 读取图片方式】本地文件名读取以及url方式读取
  8. TCP粘包/拆包问题
  9. 苹果切换输入法_最新破解朋友圈折叠的多种方法!安卓和苹果通用!亲测有效!...
  10. 螺旋线java_java 小测试,关于画螺旋线的问题.