'''
【课程6.1】 自定义函数
如何创建函数?牢记4点1def语句2函数名及参数3冒号4缩进
默认参数
def f(x,n = 2):
可变(数量)参数
def f(*x):
'''
'\n【课程6.2】 自定义函数\n\n如何创建函数?def语句\n默认参数\ndef f(x,n = 2):\n\n可变参数\ndef f(*x):\n'
def f(x):
if x<5:
print('值小于5')
else:
print('值大于等于5')
f(10)
值大于等于5
def f1(x):
y=2**x
def f2(x):
y=2**x
return y
print(f1(2),f2(2))
None 4
def f(x,n=2):
return(x**n)
print(f(3))
print(f(3,3))
9
27
def f(*x):
print(x)
return(x)
f(1)
f(1,2)
f(1,2,3,[23,'s',2])
print(type(f('a','b')))
(1,)
(1, 2)
(1, 2, 3, [23, 's', 2])
('a', 'b')
'''
小作业
① 函数f(x),输入一个字符串,分别print出每个字母
② f(x,y,z),函数内部算法:生成 ((x+y)(x-y))*z
③ 编写一个求平均值的函数 f(*m)
④ 定义一个函数,用于求矩形面积、圆形面积
⑤ 定义一个函数,函数的作用是把输入的列表变成一连串字典的key,并生成字典,需要用input输入
'''
def f(lst):
for i in lst:
print(i)
lst=input('input a string')
f(lst)
input a string666
6
6
6
def f(x,y,z):
return ((x+y)*(x-y))*z
print(f(1,2,3))
-9
def f(*m):
flag=1
for i in m:
if not str(i).isnumeric():
flag=0
if flag==1:
return sum(m)/len(m)
else:
print('input worng')
print(f(1,2,3,4,'s'))
input worng
None
def areaofrec(a,b):
return a*b
def areaofcir(r):
return 3.14*r**2
print(areaofrec(1,2),areaofcir(5))
2 78.5
lst=eval(input('请输入一个list'))
def f(lst):
return dict.fromkeys(lst,'初始值')
print(f(lst))
请输入一个list[1,2]
100
{1: '初始值', 2: '初始值'}
'''
【课程6.2】 局部变量及全局变量
局部变量
1定义在函数内部
2以及在def f(x):定义的形式参数x
拥有一个局部作用域,即在函数f(x)内部有效,在函数外无效,局部变量对象在退出函数时自动销毁
全局部变量
1在函数外定义的变量
2在全体作用域有效
注如果在函数内部给一个函数外定义的全局量x=old赋值x=new,x只在函数内部=new,离开函数恢复x=old
全局变量a和函数def(b)定义时最好不要同名
如果同名全局a def(a)在函数内部将无法访问全局a
甚至全局变量a不需要定义形参b来向函数内部传参,因为函数内可以直接访问
之所以下例这种情况给全局变量定义形参来传参是为了是f(a)函数更独立,更通用
'''
def f(a):
a='new'
print("函数内m=%s"%a)
m='old'
f(m)
print('函数外m={}'.format(m))
函数内m=new
函数外m=old
def f():
global m
m='new'
m='old'
print('执行f前m的值=',m)
f()
print('执行f后m的值=',m)
执行f前m的值= old
执行f后m的值= new
'''
【课程6.3】 匿名函数Lambda
lambda 语句创建匿名函数。
格式 f=lambda var1,var2,var3:简单操作
注:lambda的简单操作只能有一行,多为运算,若操作涉及if for while等果断选择def
'''
def f1(a,b,c) :
return a+b+c
f2=lambda a,b,c :a+b+c
print(f1(1,2,3),f2(1,2,3))
6 6
"""
小作业
① 用lambda创建一个求元素个数的匿名函数
② 定义一个函数,可将输入的所有数字从大到小依次排序
③ 定义一个函数,随机输入一个学生的成绩后,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示,最后输出成绩评分
④ 定义一个函数,可统计出输入任意的字符中英文字母、空格、数字和其它字符的个数
"""
f=lambda lst:len(lst)
print(f([1,2,3]))
3
def f(*x):
return sorted(x,reverse=True)
print(f(1,2,3))
[3, 2, 1]
def f(gradelst):
ranklst=[]
sum=0
for x in gradelst:
if x>=90:
ranklst.append('A')
elif x>=60:
ranklst.append('B')
else :
ranklst.append('C')
sum+=x
ave=sum/len(gradelst)
return [ranklst,ave]
print(f([80,99,53,57,88]))
[['B', 'A', 'C', 'C', 'B'], 75.4]
def f (tstr):
alpnum=0
spanum=0
numnum=0
for i in tstr:
if i.isnumeric():
numnum+=1
elif i.isalpha():
alpnum+=1
elif i.isspace():
spanum+=1
else:
pass
return [alpnum,spanum,numnum]
print(f('sdda556s6 56sd56s5d 56sd 595sda985ds 我说的是多情的啊 265ssd ds f5df'))
[32, 7, 21]