函数的参数:必备参数、默认参数、不定长参数 (*args元组和**kwargs字典) 知识点:
def定义函数 :后面接函数名() 括号中可以定义参数,函数调用是函数名()进行调用,有参数就传参数。函数参数 :三种 必备参数 (必须传递),默认参数 (有传入就是传入的值,没有就是默认值),不定长参数 (*args 接收多余的不是键值对a=x形式的放入到元组 中的,不定长 **kwargs 接收最后的键值对a=x,b=y形式的不定长)。函数作用域 : 函数内部不能直接修改函数外部的变量,如果需要则用global 声明全局变量 。 内层函数不能直接修改外层函数的变量,如果需要则用nonlocal 声明局部变量 。外部不能直接使用函数内的变量和内层函数,如果需要用,用闭包形式返回出去。递归函数 :函数自身返回自己的调用 必须有结束条件 也要注意递归深度匿名函数 :lambda 不需要写函数名 会自动返回数据,一般结合其他函数一起使用。
一 函数的定义和调用
def function ( x, y) :
print ( 'x is' , x)
print ( 'y is' , y)
return x+ y
function( 1 , 2 )
二 函数参数
def func ( x, y= 100 , * args, ** kwargs) - > int :
print ( x)
print ( y)
print ( args)
print ( kwargs)
return x * y
a = func( 10 , 20 , 30 , 40 , 'a' , [ 1 , 2 ] , { 'b' : 1 } , name= 'moran' , age= 18 )
print ( help ( func) )
三 函数作用域
num = 100
def func ( ) :
global num
num = num* 10
print ( num)
def laowang ( ) :
tv = 100
def son1 ( ) :
nonlocal tv
tv += 10
print ( tv)
def son2 ( ) :
nonlocal tv
tv += 10
print ( tv)
return son1( )
四 闭包
def func ( ) :
lv = 1
def add ( ) :
nonlocal lv
lv += 1
return lv
def sub ( ) :
nonlocal lv
lv -= 1
return lv
return add, sub
add, sub = func( )
五 递归函数
def recursion ( n) :
if n == 0 :
return 1
else :
return recursion( n - 1 ) * n
print ( recursion( 5 ) )
六 匿名函数、内置函数、函数回调
li = [ 1 , 2 , 3 , '4' , 'a' , 'b' ]
li. sort( key= lambda x: str ( x) )
print ( 'a的ascll码值:' , ord ( 'a' ) )
print ( '66对应的:' , chr ( 66 ) )
print ( len ( [ 1 , 2 , 3 ] ) )
li = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
def func ( x) :
if x> 5 :
return x
ft = filter ( func, li)
print ( list ( ft) )
ft1 = filter ( lambda x: x> 5 , li)
ft2 = filter ( lambda x: x% 2 == 0 , li)
print ( list ( ft1) )
def func ( x) :
if x% 2 == 0 :
return x* 100
else :
return x* 10
map1 = map ( func, li)
map2 = map ( lambda x: x* 100 if x% 2 == 0 else x* 10 , li)
print ( list ( map1) )
print ( list ( map2) )
li1 = [ ]
def func ( x) :
if x> 5 :
li1. append( x)
for i in li:
func( i)
print ( li1)
def func ( f) :
f( )
print ( '这是func调用' )
def play ( ) :
print ( '这是play' )
func( play)
七 练习
def sort1 ( ) :
li = [ ( 2 , 4 , 6 , 7 ) , ( 1 , 2 , 3 , 4 ) , ( 3 , 4 , 5 , 6 ) , ( 6 , 2 , 5 , 8 ) ]
def func ( x) :
return x[ 1 ]
li. sort( key= func)
print ( li)
def isPrime ( param) :
print ( type ( param) )
if isinstance ( param, int ) == False :
print ( '参数是整数,请重新输入!' )
elif param <= 1 :
print ( '质数大于 1' )
elif param == 2 :
return True
else :
for i in range ( 2 , param) :
if param % i == 0 :
print ( f'{param}不是质数' )
return False
else :
print ( f'{param}是质数' )
return True
def factorial ( param) :
if param == 0 :
print ( f'{param}=' , end= '' )
return 1
elif param < 0 :
print ( f'{param}*' , end= '' )
return param * factorial( param + 1 )
else :
print ( f'{param}*' , end= '' )
return param * factorial( param - 1 )
a = factorial( - 8 )
def issort2 ( st) :
if list ( st) == sorted ( st) :
return 'UP'
elif list ( st) == sorted ( st, reverse= True ) :
return 'DOWN'
else :
return False
issort2( 'abcd' )