python3函数的进阶补充

Python3函数进阶补充,参考了《Python3从入门到实战》这本书

  • 可变形参:
  • 字典形参:
  • 解封参数列表:
  • 函数可以放在容器内:
  • 函数可以作为返回值:
  • 函数可以嵌套使用:
    • 嵌套函数案例2:
  • 函数可以作为其他函数的参数:
  • lambda表达式:
  • 内置map函数
    • map案例2
  • filter


可变形参:

可变形参即是参数可以任意:

// An highlighted block
def hello(*name):
    print(name)
hello("10")
hello("许嵩")


运行结果如下:
('10',)
('许嵩',)

字典形参:

字典形参表示传给函数的参数是字典类型(键值对):

// An highlighted block
def hello(**name):
    print(name)
hello(year='2020',month=10,day=10)


运行结果如下:
{
     'year': '2020', 'month': 10, 'day': 10}

注意:如果函数定义里面既有可变形参,又有字典形参,则字典形参必须位于可变形参的后面!

解封参数列表:

用两个“ * ”来解封字典,用一个“ * ”来解封其他对象:

// An highlighted block
def f(a,b):
    print(a+b)
ab = [3,5]
f(*ab)


运行结果如下:
8


ab = [3,7]
l = [i for i in range(*ab)]
print(l)



运行结果如下:
[3, 4, 5, 6]


d = {
     "name1":"许嵩","name2":"周杰伦"}
def f(name1,name2):
    print(name1)
    print(name2)
f(**d)


运行结果如下:
许嵩
周杰伦
   def f():
       '''
       这是函数文档
       '''
       print("这是一个函数")
       return 1
   
   print(help(f))
   运行结果如下:
   
	f()
	    这是函数文档
	
	None

函数可以放在容器内:

将函数放在"容器"内:

// An highlighted block
	def square(x):
        return x*x
        
    def cube(x):
        return x*x*x
    
    funcs = {
     
        'sq':square,
        'cb':cube,
        }
    x = 2
    print(square(x))
    print(cube(x))
    print("-----容器内-----")
    for func in funcs:
    	print(funcs[func](x))
运行结果如下:
4
8
-----容器内-----
4
8
// An highlighted block
	def square(x):
        return x*x
        
    def cube(x):
        return x*x*x
    
    funcs = {
     
        'sq':square,
        'cb':cube,
        }
    x = 2
   
    func = [square,cube]
    for fun in func:
        print(fun(x))
运行结果如下:
4
8

函数可以作为返回值:

在一个函数中返回另一个函数的名字:

// An highlighted block
	def f(a):
        print(a)
    def f1():
        return f
    a = f1()
    a(0)
  运行结果如下:
0

函数可以嵌套使用:

在一个函数中定义并调用另一个函数:

// An highlighted block
def Square(x):
	def f():
    	return x*x
    y = f()
    return y*x
    
print(Square(5))

运行结果如下:  
125

嵌套函数案例2:

注意对比二者的异同,nonlocal相当于声明全局变量。

// An highlighted block
def Square(x):
       def f():
           #nonlocal x
           x = 2
           return x*x
       	y = f()
        return y+x
print(Square(5))  
运行结果如下
9

def Square(x):
       def f():
           nonlocal x
           x = 2
           return x*x
       	y = f()
        return y+x
print(Square(5))  
运行结果如下
6

函数可以作为其他函数的参数:

// An highlighted block
def square(x):
	return(x*x)
def SquList(L,fun):
	for e in L:
		print(fun(e),end=" ")
SquList([2,3,4,5],square)
运行结果如下
4 9 16 25

lambda表达式:

相当于定义了一个函数

// An highlighted block
add = lambda x,y:x+y//add是函数名
print(add(3,5))

运行结果如下 8

内置map函数

*map第二个形参接受多个可迭代对象,函数原型:map(function,iterable),iterable是可变形参,function是函数,返回一个迭代器对象
:

// An highlighted block
def Square(x):
	return x*x
l = [1,2,3,4,5]
ret = map(Square,l)//相当于把l中的所有元素都进行了Square操作
print(list(ret))

#二者都可以构造,但只可以构造一次
print(tuple(ret))


运行结果如下:
[1, 4, 9, 16, 25]
()

map案例2

// An highlighted block
ret = map(lambda x,y:x*y,[1,4,3],[3,5,2,6])
print(tuple(ret))
ret = map(lambda x,y:(x*y,x+y),[1,4,3],[3,5,2,6])
print(tuple(ret))


运行结果如下:
(3, 20, 6)
((3, 4), (20, 9), (6, 5))

filter

filter 返回被判断为True的元素,函数原型为:filter(function of None,interable)

// An highlighted block
a = [i for i in range(-5,5)]
ret = filter(lambda x:x<0,a)
print(list(ret))

运行结果如下:
[-5, -4, -3, -2, -1]

你可能感兴趣的:(Python基础笔记,python)