目录
一、局部变量与全局变量
•局部变量局部变量,就是在函数内部定义的变量
不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
作用 : 临时保存数据需要在函数中定义变量来进行存储,
•全局变量一个变量,既能在一个函数中使用,也能在其他的函数中使用
二、函数的返回值
在python中我们怎样返回多个值?
python中可以返回多个值:
格式:def 函数名(参数名1,参数名2.....) :
函数执行代码
函数执行代码
.........
return 返回值1,返回值2,......
调用:
依次存返回值变量1,变量2,.... = 函数名(参数值1,........)
缺省参数}调用函数时,缺省参数的值如果没有传入,则被认为是默认值。}格式:def 函数名(参数名1,参数2=默认值,....参数n=默认值):}调用时:函数名(值1)注意:带有默认值的参数一定要位于参数列表的最后面。
def usrinfo(name,age=25):
print("Name = %s"%name)
print("age = %d"%age)
usrinfo('zhangsan')
Name = zhangsan
age = 25
不定长参数格式:def 函数名(参数名1,*args,**kwarg):
调用时:函数名(值1)
注意:加*表示args可以存放所有未命名的变量参数,args为元组
加**表示kwarg可以存放命名参数,即形如key=value的参数, kwargs为字典。
例子:
引用传参Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量。
例子:若将a +=a 修改成 a = a + a ,再次观察效果,讨论原因
"""
如何返回多个值
函数内部看到return 会跳出函数
def num(a,b):
c = a + b
d = a - b
return c
print("-------")
return d
c = num(20,10)
d = num(20,10)
print(c,d)
"""
def num(a,b):
c = a + b
d = a - b
return c , d
num1, num2 = num(20,10)
print(num1,num2)
def num(a,b,*args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
num(1,2,3,4,5,6,name = "小红",age = 18)
"""
参数拥有默认值, 缺省参数会放在最后面
"""
def user_info(name, age = 16):
print("学生的名字是%s" % name)
print("学生的年龄是 %s" % age)
user_info("小张",20)
def user(*args)
"""
参数拥有默认值, 缺省参数会放在最后面
"""
def user_info(name, age = 16):
print("学生的名字是%s" % name)
print("学生的年龄是 %s" % age)
user_info("小张",20)
三、递归函数和匿名函数
递归函数如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
例子:我们来计算阶乘 n! = 1 * 2 * 3 * ... * n
"""
计算阶乘
n! 3x2x1
"""
#通过循环实现
# def cal_num(n):
#
# i = 1
#
# rest = 1
#
# while i <= n:
#
# rest *= i
#
# i+= 1
#
# return rest
#
# ret = cal_num(10)
# print(ret)
# 通过递归方式来实现
def cal_num(n):
if n >= 1:
rest = n * cal_num(n-1)
else:
rest = 1
return rest
ret = cal_num(3)
print(ret)
匿名函数用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
例子:求两个数据的和
>>> sum = lambda a,b:a+b
>>> sum(45,23)
68
# def sum(a,b):
# c = a+b
# return c
#
# c =sum(10,20)
# print(c)
c = lambda a,b : a+b
print(c(10,20))
四、test
-
1、 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
2、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
3、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
4、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
5、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。PS:字典中的value只能是字符串或列表
# 1、 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def size(obj):
if len(obj) > 5:
return True
else:
return False
if size("abcd") == True:
print("大于5")
else:
print("不大于5")
# 2、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
def kong(aaa):
for i in aaa:
if i == ' ':
return True
return False
print(kong("qqw qwq"))
print(kong([1,2,3,4,5]))
# 3、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,
# 并将新内容返回给调用者
def second(li):
return li[0:2]
print(second([1,2,3]))
print(second([1,2]))
print(second([1]))
# 4、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,
# 并将其作为新列表返回给调用者。
def www(lisu):
return lisu[0::2]
print(www([1,2,3,4,5,6,7]))
print(www(("123",1,2,3,4,5)))
# 5、写函数,检查传入字典的每一个value的长度,如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
# PS:字典中的value只能是字符串或列表
def ccc(dic):
asa = {}
for key,value in dic.items():
if(len(dic) > 2):
asa[key] = value
if(len(asa) == 2):
return asa
else:
return dic
print(ccc({"k1":"V1","111":"222",'3':'4'}))