Python基础(16) 函数(二)

使用模块中的函数

模块是 Python 程序架构的一个核心概念

  • 模块就好比是工具包,要想使用这个工具包中的工具,就需要导入 import这个模块
  • 每一个以扩展名py结尾的Python源代码文件 都是一个 模块
  • 在模块中定义的全局变量、函数都是模块能够提供给外界直接使用的工具
  • 可以 在一个 Python 文件 中 定义 变量 或者 函数
  • 然后在 另外一个文件中 使用 import 导入这个模块
  • 导入之后,就可以使用模块名.变量 / 模块名.函数 的方式,使用这个模块中定义的变量或者函数

变量

  • 局部变量:是在函数内部 定义的变量,只能在函数内部使用
  • 全局变量:是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量

局部变量

  • 局部变量:是在函数内部定义的变量,只能在函数内部使用
  • 函数执行结束后,函数内部的局部变量,会被系统回收
  • 不同的函数,可以定义相同的名字的局部变量,但是彼此之间不会产生影响
    代码示例:
def demo1():
    num = 10
    print(num)
    num = 20
    print("修改后 %d" % num)
def demo2():
    num = 100
    print(num)

demo1()
demo2()
print('over')
10
修改后 20
100
over

全局变量

# 定义一个全局变量
num = 10
def demo1():
    print(num)
def demo2():    
	print(num)
demo1()
demo2()
10
10

函数执行时,需要处理变量时会:

  1. 首先 查找 函数内部 是否存在 指定名称 的局部变量,如果有,直接使用
  2. 如果没有,查找 函数外部 是否存在 指定名称 的全局变量,如果有,直接使用
  3. 如果还没有,程序报错

修改全局变量

global 声明变量是全局变量

num = 10
def demo1():     
    # global 关键字,告诉 Python 解释器 num 是一个全局变量    
    global num    
    # 只是定义了一个局部变量,不会修改到全局变量,只是变量名相同而已    
    num = 100    
    print(num)
def demo2():       
    print(num)
demo1()
demo2()
#结果
100
100

返回值作为参数传递

def test1():
    return 50
def test2(num):
    print(num)
i = test1()
test2(i)
# 结果
50

函数参数

位置参数

调用函数时根据函数定义的参数位置传递函数
实参和形参的顺序和个数必须一致

def output(name,age,wight):
    print(f'姓名:{name},年龄:{age},体重:{wight}')
output('tom',20,70)
# 结果根据参数位置依次把数据输入到函数中
姓名:tom,年龄:20,体重:70

关键字参数

函数调用通过‘键=值’来加以制定,可以让函数更加清晰、容易使用、同时也清楚了参数得顺序需求
注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

def output(name,age,wight):
    print(f'姓名:{name},年龄:{age},体重:{wight}')
output('tom',age=20,wight =73)
姓名:tom,年龄:20,体重:73

缺省参数

缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数得值
注意:所有参数必须出现在默认参数前,包括函数定义和调用

def output(name,age,wight,grander='男'):
    print(f'姓名:{name},年龄:{age},体重:{wight},性别:{grander}')
output('tom',20,68)
# 结果
姓名:tom,年龄:20,体重:68,性别:男

不定长参数

不定长参数也叫可变参数,用于不确定调用得时候会传递多少个参数(不传递也可以)得场景。此时,可用包裹(packing)位置参数,或者包裹(packing)关键字参数,来进行参数传递,回显得非常方便。

  • 包裹位置参数
    注意:传进得所有参数都会被args变量收集,他会根据传进得参数得位置合并为一个元组,args是元组类型,这就是包裹位置传递。
def user(*args):
    print(args)
user('tom',20,65)   
# 结果
('tom', 20, 65)
  • 包裹关键字传递
    返回一个字典
def user1(**kwargs):
    print(kwargs)
user1(name='tom',age=20,wight=65,grander='女')
#结果
{'name': 'tom', 'age': 20, 'wight': 65, 'grander': '女'}

拆包

  • 元组拆包
def test1():
    return 100,200
num1,num2=test1()
print(num1,num2)  #100 200
  • 字典拆包
dict1 ={'name': 'tom', 'age': 20, 'wight': 65}
a,b,c=dict1
print(a,b,c)
print(dict1[a],dict1[b],dict1[c])
#结果
name age wight
tom 20 65

补充

交换变量:

  1. 有两个整数变量 a = 6 , b = 100
  2. 不使用其他变量,交换两个变量的值
# 变量交换
a = 60
b = 100
#传统方法
a = a+b
b =a-b
a =a-b
print(a,b)
# 变量交换
a = 60
b = 100
# python 方法
a,b =b,a
print(a,b)

变量的引用

  • 变量和数据都是保存在内存中的在
  • Python 中函数的参数传递以及返回值都是靠引用传递的

引用的概念

在Python中

  • 变量 和 数据 是分开存储的
  • 数据保存在内存中的一个位置
  • 变量 中保存着数据在内存中的地址
  • 变量中 记录数据的地址,就叫做引用
  • 使用 id() 函数可以查看变量中保存数据所在的内存地址
    定义一个整数变量 a ,并且赋值为 1
    在这里插入图片描述将变量 a 赋值为 2
    在这里插入图片描述定义一个整数变量 b ,并且将变量 a 的值赋值给 b
    在这里插入图片描述变量 b 是第 2 个贴在数字 2 上的标签

变量的数据类型

不可变类型,内存中的数据不允许被修改:
数字类型 int , bool , float , complex , long(2.x)
字符串 str
元组 tuple
可变类型,内存中的数据可以被修改:
列表 list
字典 dict
集合 set

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值