我是靠谱客的博主 潇洒星星,最近开发中收集的这篇文章主要介绍python基础____学习笔记4(函数、局部变量、全局变量、参数收集、参数拆包,匿名函数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一 、函数

1.1 局部变量和全局变量

函数内部修改全局变量,需要使用关键字glabl来声明变量为全局变量

a = 100
#全局变量
def testA():
a=150
#局部变量
print(a)
def testB():
# global
函数内部使用全局变量,需要关键字glabl声明a是全局变量量
global a
a = 200
print(a)
def testC():
print(a)
testA() # 150
testB() # 200
print(f'全局变量量a = {a}') # 全局变量量 a = 200

使用全局变量的方法
1. 函数中globals()['变量名']     globals()函数返回全局变量的字典。
2. 在函数中 global x 来定义说明x是全局变量

1.2 形参和实参
   python只有值传递,没有C语言的指针或者引用传递,如果想修改形参同时也修改了实参,需要返回值赋值给实参.如果参数是列表或者字典的话,例外。

def change(x):
x+=10
return x
x=5
x=change(x)
print(x)

1.3 返回值
     python 支持多值返回,多值返回是返回元组类型

def F1 ( x, y ):
a = x % y
b = (x-a) / y
return ( a,b )
# 也可以写作
return a, b
(c, d )= F1( 9, 4)
# 也可以写作 c , d = F1 ( 9, 4 )

1.4   位置参数 关键字参数  缺省参数  不定长参数
位置参数:调⽤用函数时根据函数定义的参数位置来传递参数

def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info('JJ', 23, '男')

关键字参数: 通过“键=值”形式加以指定, 清除了参数的顺序需求.

def user_info(name, age, gender):
print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info(age=23, name='JJ',gender='男')
user_info('小明', gender='男', age=16)

注意: 函数调⽤用时,如果有位置参数时,位置参数必须在关键字参数的前⾯面,但关键字参数之间不不存在
先后顺序。


缺省参数也叫默认参数, 调⽤用函数时可不不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调⽤用)

def user_info(name, age, gender='男'):
print(f'您的名字是{name}, 年年龄是{age}, 性别是{gender}')
user_info('TOM', 20)
user_info('Rose', 18, '⼥')

不定长参数:
        用于不确定调⽤用的时候会传递多少个参数(不传参也可以)的场景。此时,可用收集位置参数,或者收集关键字参数,来进行参数传递,会显得非常方便便。'*' 收集位置参数,'**‘收集关键字参数, 位置参数收集后形成元组,关键字参数收集后形成字典

收集位置参数

def user_info(*args):
print(args)
user_info('kai')
# ('TOM',)
user_info('KAI', 20)
# ('TOM', 20)

收集关键字参数

def user_info(**kwargs):
print(kwargs)
print(kwargs.get('name'))
print(kwargs.get('age'))
print(kwargs.get('id'))
user_info(name='KAI', age=22, id=10)
# {'name': 'TOM', 'age': 18, 'id': 110}

通知收集位置参数、关键字参数
 

def print_params(x,y,z=3, *pospar, **keypar):
print(x,y, z)
print(pospar)
print(keypar)
print_params(1, 2, 3, 5, 6, 7, foo=1, bar=2)
#1 2 3 位置参数有有7个,但是分别x,y,z三个变量,先对x,y,z赋值,然后*pospar才收集剩余位置参数
#(5, 6, 7)
#{'foo': 1, 'bar': 2} **keypar 收集关键字参数
def print_params_2(*pospar,x,y,z=3, **keypar):
print(x,y, z)
print(pospar)
print(keypar)
print_params_1(1, 2, 3, 5, 6, 7, foo=1, bar=2)
#1 2 3
#(5, 6, 7)
#{'foo': 1, 'bar': 2}

1.5 分配参数
分配参数: 在函数调用时候加上 *,**,   *传入参数是元祖,**传入参数是字典 或者关键字参数;与收集参数正好相反
  1. 拆元组,拆字典

def return_num():
return 100, 200
num1, num2 = return_num() #拆元组
dict1 = {'name': 'TOM', 'age': 18}
a, b = dict1
# 对字典进⾏行行拆包,取出来的是字典的key a为name, b为age

2.  使用*  操作符来自动把参数列表拆开,       作为实参 调用函数
     使用** 操作符来自动把参数作为字典拆开,作为实参 调用函数

 

def print_value(x,y,z):
print(x)
print(y)
print(z)
def print_dict(x=1,y=2,z=3):
print(x)
print(y)
print(z)
mylist=[ x for x in range(5,8)]
paramname=['x','y','z']
mydict=dict(zip(paramname,mylist))
print(mydict)
print_value(*mylist)
#将列表展开
print_dict(**mydict)
#将字典展开

 

 

二、 lambda表达式
如果函数有一个返回值,并且只有一句代码,可以使⽤用 lambda简化
         lambda 参数列列表 : 表达式
lambda表达式的参数可有可⽆无,函数的参数在lambda表达式中完全适⽤用。
lambda函数能接收任何数量量的参数但只能返回⼀一个表达式的值

lambda实现

def fn1():
return 100
print(fn1())
# lambda表达式
fn2 = lambda: 100
print(fn2())
def add(a, b):
return a + b
fn3 = lambda a,b: a+b
print(fn3(1,2))
#无参
print((lambda: 100)())
#1个参数
print((lambda a: a)('hello world'))
#默认参数
print((lambda a, b, c=100: a + b + c)(10, 20))
#可变参数,这⾥里里的可变参数传⼊入到lambda之后,返回值为元组
print((lambda *args: args)(10, 20, 30))
#(10, 20, 30)
#可变参数: **kwargs
print((lambda **kwargs: kwargs)(name='python', age=20))
#{'name': 'python', 'age': 20}

 

 

最后

以上就是潇洒星星为你收集整理的python基础____学习笔记4(函数、局部变量、全局变量、参数收集、参数拆包,匿名函数)的全部内容,希望文章能够帮你解决python基础____学习笔记4(函数、局部变量、全局变量、参数收集、参数拆包,匿名函数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部