'''
【课程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')
<class 'tuple'>
'''
小作业
① 函数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]