VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • python--高级语法 5

day3:

1、形参角度:(重点)

万能参数: *args

  • *的魔性用法-------在函数的定义时,表示聚合 ;在函数的调用时,表示打散或解包。
def eat(a,b,c,d):
    print('我请你吃:{},{},{},{}'.format(a,b,c,d))

eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭')

# 急需要一种形参,可以接受所有的实参。
# 万能参数: *args, 约定俗称:args,
# 函数定义时,*代表聚合。 他将所有的位置参数聚合成一个元组,赋值给了 args。

def eat(*args):
    print(args)
    print('我请你吃:{},{},{},{}'.format(*args))

eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭')

我请你吃:蒸羊羔,蒸熊掌,蒸鹿邑,烧花鸭
('蒸羊羔', '蒸熊掌', '蒸鹿邑', '烧花鸭')
我请你吃:蒸羊羔,蒸熊掌,蒸鹿邑,烧花鸭

Process finished with exit code 0
  • 练习题:写一个函数:计算你传入函数的所有的数字的和。
#练习题:写一个函数:计算你传入函数的所有的数字的和。
# tu1=(1,2,3,4,5,6,7)
# count=0
# for i in tu1:
#     count=count+i
# print(count)

def func(*args):
    count = 0
    for i in args:
        count = count + i
    return count

print(func(1,2,3,4,5,6,7))

28

Process finished with exit code 0

万能参数:**kwargs

# **kwargs
# 函数的定义时: ** 将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs.
def func(**kwargs):
    print(kwargs)

func(name='alex',age=73,sex='laddyboy')

{'name': 'alex', 'age': 73, 'sex': 'laddyboy'}

Process finished with exit code 0
# * **在函数的调用时,*代表打散---也可以说 解包
def func(*args):
    print(args)

func([1,2,3],[22,33])
func(*[1,2,3],[22,33])
func(*[1,2,3],*[22,33])

([1, 2, 3], [22, 33])
(1, 2, 3, [22, 33])
(1, 2, 3, 22, 33)

Process finished with exit code 0
def func(*args,**kwargs):
    print(args)
    print(kwargs)

func({'name': '太白'},{'age': 18})
print('*********')
func(**{'name': '太白'},**{'age': 18})

({'name': '太白'}, {'age': 18})
{}
*********
()
{'name': '太白', 'age': 18}

Process finished with exit code 0

形参角度的参数的顺序

(位置参数,默认参数,万能参数)

  • 思考?------*args的位置?
    • 必须放在位置参数后面,默认参数前面(如果默认参数放在*args 前面,那么调用的时候,默认参数的值会被改变)
#形参角度的参数的顺序(位置参数,默认参数,万能参数)
# *args的位置?----必须放在位置参数后面,默认参数前面
def func(a,b,*args,sex='男'):
    print(a,b)
    print(sex)
    print(args)

func(1,2,3,4)

1 2
男
(3, 4)

Process finished with exit code 0
  • 思考?----**kwargs的位置?
    • 要放在默认参数后面,
#**kwargs的位置?
def func(a,b,*args,sex='男',**kwargs):
    print(a,b)
    print(sex)
    print(args)
    print(kwargs)

func(1,2,3,4,age=12)

1 2
男
(3, 4)
{'age': 12}

Process finished with exit code 0

仅限关键字参数(了解)

  • 放在*args和**kwargs的位置之间,类似于默认参数
def func(a,b,*args,sex='男',c,**kwargs):
    print(a,b)
    print(sex)
    print(args)
    print(c)
    print(kwargs)

func(1,2,3,4,age=12,c='666')

1 2
男
(3, 4)
666
{'age': 12}

Process finished with exit code 0

形参角度最终的顺序:

  • 位置参数,*args,默认参数,仅限关键字参数,**kwargs

函数的嵌套(高阶函数)

# 例1:---思考打印结果和顺序
def func1():
    print('in func1')
    print(3)

def func2():
    print('in func2')
    print(4)

func1()
print(1)
func2()
print(2)

in func1
3
1
in func2
4
2

Process finished with exit code 0
# 例2:---思考打印结果和顺序
def func1():
    print('in func1')
    print(3)

def func2():
    print('in func2')
    func1()
    print(4)

print(1)
func2()
print(2)

1
in func2
in func1
3
4
2

Process finished with exit code 0

# 例3:---思考打印结果和顺序
def fun2():
    print(2)

    def fun3():
        print(6)

    print(4)
    fun3()
    print(8)

print(3)
fun2()
print(5)

3
2
4
6
8
5

Process finished with exit code 0


出处:https://www.cnblogs.com/wushaofan/p/17156647.html
 

相关教程