python 函数深入

简介: 变量得作用域是指变量生效得范围,主要两类:局部变量和全局变量

函数


  • 变量得作用域
  • 多函数程序执行流程
  • 函数得返回值
  • 函数得参数
  • 拆包和交换两个变量得值
  • 引用
  • 可变和不可变类型


一、变量作用域


变量得作用域是指变量生效得范围,主要两类:局部变量和全局变量


  • 局部变量


所谓局部变量是定义在函数体内部得变量,即只在函数体内部得变量


def testa():
    a=100
    print(a)
testa()
print(a) #报错


作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量


  • 全局变量


a=100
print(a)
def teata():
    print(a)
teata()


修改全局变量


a=100
print(a)
def teata():
    print(a)
def teatb():
    a=200
    print(a)
teata()
teatb()
"""
100
100
200
"""


修改全局变量 使用关键字 global


a=100
print(a)
def teata():
    print(a)
def teatb():
    global a
    a=200
    print(a)
teata()
teatb()
print(a)
"""
100
100
200
200
"""


二多函数程序执行流程


一般在实际开发过程中,一个程序往往由多个函数组成,并且多个函数共享某些数据,如下所示:


  • 共用全局数据


#定义全局变量
num=0
def test1():
    global num
    num=100
def test2():
    print(num)
test1()
test2() #100


  • 返回值作为参数传递


def test1():
    return 50
def teat2(num):
    print(num)
#保存test1得返回值
result=test1()
#将函数返回值所在变量作为参数传递到teat2
teat2(result)


三、函数得返回值


思考:如果一个函数如些两个return,程序如何执行


def retur_num():
    return 1
    return 2
result=retur_num()
print(result) #1


答 只执行第一个return,原因是return可以退出当前函数,导致return下方代码不执行。


思考 如果一个函数要有多个返回值,该如何书写代码


def retur_num():
    #return 1,2
    #teturn 后面可以直接书写元组,字典,列表
    return [1,2]
result=retur_num()
print(result) #(1, 2)


四函数得参数


4.1位置参数


位置参数:调用函数时根据函数定义得参数位置来传递参数


def user(name,age,gender):
    print(f'您得名字{name},年龄{age},性别{gender}')
user('tom',20,'男')    
#您得名字tom,年龄20,性别男


注意:传递和定义参数得顺序几个数必须一致


4.2关键字参数


函数调用通过‘键=值’来加以制定,可以让函数更加清晰、容易使用、同时也清楚了参数得顺序需求


def user(name,age,gender):
    print(f'您得名字{name},年龄{age},性别{gender}')
# user('tom',20,'男')
# #您得名字tom,年龄20,性别男
user('小米',gender='男',age=16)
user('小米',age=66,gender='男')
#您得名字小米,年龄16,性别男


注意 函数调用时,如果又位置参数时,位置参数必须在关键字参数得前面,但关键字参数之间不存在先后顺序


4.3缺省参数


缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数得值


注意:所有参数必须出现在默认参数前,包括函数定义和调用


def user(name,age,gender='男'):
    print(f'您得名字{name},年龄{age},性别{gender}')
# user('tom',20,'男')
# #您得名字tom,年龄20,性别男
user('小米',20)
user('小米',66,gender='女')
"""
您得名字小米,年龄20,性别男
您得名字小米,年龄66,性别女
"""


注意:函数调用时,如果为缺省参数传值则修改默认参数值;否则使用这个默认值。


4.4不定长参数


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


  • 包裹位置参数


def user(*args):
    print(args)
user('小米',20)
user('小米')
"""
('小米', 20)
('小米',)
"""


注意:传进得所有参数都会被args变量收集,他会根据传进得参数得位置合并为一个元组,args是元组类型,这就是包裹位置传递。


  • 包裹关键字传递


def user(**kwargs):
    print(kwargs)
# user('tom',20,'男')
user(name='小米',age=20, id=110)
user(name='小米',age=66,gender='女')
"""
{'name': '小米', 'age': 20, 'id': 110}
{'name': '小米', 'age': 66, 'gender': '女'}
"""


五,拆包和交换变量值


5.1拆包


  • 拆包:元组


def return_num():
    return 100,200
num1,num2=return_num()
print(num1)
print(num2)
"""
100
200
"""


  • 拆包:字典


dict1 = {'name':'小米','age':66}
a,b=dict1
print(a)
print(b)
"""
name
age
"""
print(dict1[a])
print(dict1[b])
"""
小米
66
"""


交换变量得值


需求:有变量a=10和b=20,交换两个变量得值


  • 方法一


借助第三变量


c=0
a=10
b=20
c=a
a=b
b=c
print(a)
print(b)


  • 方法二


a,b=1,2
a,b=b,a
print(a)
print(b)


六、引用


6.1了解引用


在python语言中值都是考引用来传递得。


我们可以通过id来判断两个变量是否为同一个值引用。我们可以将id值理解为那块内存得地标识


a=1
b=1
print(b)
print(id(a)) #140709588734784
print(id(b))  #140709588734784
a=2
print(b) #1


在列表中


#列表
aa=[10,20,30]
bb=aa
print(id(aa))
print(id(bb))
aa.append(30)
print(bb)
print(id(aa))
print(id(bb))
"""
2756781695560
2756781695560
[10, 20, 30, 30]
2756781695560
2756781695560
"""


6.2引用当作实参


代码如下


def test1(a):
    print(a)
    print(id(a))
    a += a
    print(a)
    print(id(a))
#int
b=100
test1(b)
#列表
c=[10,20]
test1(c)
“”“
100
140709647785888
200
140709647789088
[10, 20]
2491374002760
[10, 20, 10, 20]
2491374002760”“”


注意:如果以(test 或test1等等)命名可能出错,具体原因不清楚


fixture ‘xxx’ not found的问题


在python中数据得传递通过引用


七 可变和不可变类型


所谓得可变类型和不可变类型是指;数据能够直接修改,如果能够直接修改那么就是可变,否则就是不可变。


可变类型


  • 列表


  • 字典


  • 集合

不可变类型


  • 整形


  • 浮点型


  • 字符串


  • 元组
相关文章
|
8天前
|
Python
python函数的参数学习
学习Python函数参数涉及五个方面:1) 位置参数按顺序传递,如`func(1, 2, 3)`;2) 关键字参数通过名称传值,如`func(a=1, b=2, c=3)`;3) 默认参数设定默认值,如`func(a, b, c=0)`;4) 可变参数用*和**接收任意数量的位置和关键字参数,如`func(1, 2, 3, a=4, b=5, c=6)`;5) 参数组合结合不同类型的参数,如`func(1, 2, 3, a=4, b=5, c=6)`。
13 1
|
23天前
|
Python
Python函数使用(四)
Python函数使用(四)
59 0
|
1天前
|
Serverless 开发者 Python
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
25 1
|
1天前
|
索引 Python
Python高维变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
Python高维变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
|
3天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
25 0
|
3天前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
|
4天前
|
Python
python学习10-函数
python学习10-函数
|
4天前
|
Python
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
python学习4-内置函数range()、循环结构、循环控制语句、else语句、嵌套循环
|
7天前
|
测试技术 开发者 Python
Python中的装饰器:优雅而强大的函数修饰工具
在Python编程中,装饰器是一种强大的工具,用于修改函数或方法的行为。本文将深入探讨Python中装饰器的概念、用法和实际应用,以及如何利用装饰器实现代码的优雅和高效。
|
12天前
|
Python
Python函数学习应用案例详解
【4月更文挑战第7天】学习Python函数的应用,包括计算两数之和、判断偶数、计算阶乘、生成斐波那契数列及反转字符串。示例代码展示了函数接收参数和返回结果的功能,如`add(a, b)`求和,`is_even(num)`判断偶数,`factorial(n)`计算阶乘,`fibonacci(n)`生成斐波那契数,以及`reverse_string(s)`反转字符串。
13 1