zoukankan      html  css  js  c++  java
  • python 函数的动态参数

    1. 函数的动态参数
      1. *args 位置参数动态传参
      2. **kwargs 关键字参数动态传参
      顺序:位置参数, *args, 默认值, **kwargs

      def func(*args, **kwargs):
      pass

      形参的位置*,**: 聚合
      实参的位置*,**: 打散
    2. 命名空间
      1. 内置名称空间
      2. 全局名称空间
      3. 局部名称空间

    作用域:
      1. 全局作用域: 内置+全局
      2. 局部作用域: 局部(函数被调用)
      globals() 查看全局中的内容
      locals() 查看当前作用域中的内容
    3. 函数嵌套
      函数可以互相的嵌套
    4. global和nonlocal关键
      global: 在局部访问全局中的内容
      nonlocal: 在局部寻找外层函数中离他最近的那个变量

     

     

     

    2,写函数,接收n个数字,求这些参数数字的和。(动态传参)

     

    3,读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?

         a=10

         b=20

         def test5(a,b):

                  print(a,b)

         c = test5(b,a)

         print(c)

     

    4,读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?

         a=10

         b=20

         def test5(a,b):

             a=3

             b=5

             print(a,b)

         c = test5(b,a)

         print(c)

         print(a,b)

    5,写函数,传入函数中多个实参(均为可迭代对象如字符串,列表,元祖,集合等),将每个实参的每个元素依次添加到函数的动态参数args里面.

    例如 传入函数两个参数[1,2,3] (22,33)最终args为(1,2,3,22,33)

     

    6,写函数,传入函数中多个实参(实参均为字典),将每个实参的键值对依次添加到函数的动态参数kwargs里面.

    例如 传入函数两个参数{‘name’:’alex’} {‘age’:1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000}

    7, 下面代码成立么?如果不成立为什么报错?怎么解决?

    7.1

            a = 2
            def wrapper():
                print(a)
            wrapper()

    7.2
            a = 2
            def wrapper():
                a += 1
                 print(a)
            wrapper()

    7.3

    def wrapper():
               a = 1
               def inner():
                   print(a)
               inner()
        wrapper()

    7.4

    def wrapper():
               a = 1
               def inner():
                   a += 1
                   print(a)
               inner()
        wrapper()

     

    8,写函数,接收两个数字参数,将较小的数字返回.

     

    9,写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’_’相连接,形成新的字符串,并返回.

    例如 传入的可迭代对象为[1,'孙悟空','猪八戒']返回的结果为’1_老男孩_武sir’

     

    10,写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}

    例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此题用到max(),min()内置函数)

     

    11,写函数,传入一个参数n,返回n的阶乘

    例如:cal(7)  计算7*6*5*4*3*2*1

     

    12写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组

    例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]

     

    13 有如下函数:

    def wrapper():
               def inner():
                   print(666)
        wrapper()

     

    你可以任意添加代码,用两种或以上的方法,执行inner函数.

     

     

    14相关面试题(先从纸上写好答案,然后在运行):

    1,有函数定义如下:

    def calc(a,b,c,d=1,e=2):

    return (a+b)*(c-d)+e

    请分别写出下列标号代码的输出结果,如果出错请写出Error。

    print(calc(1,2,3,4,5))_____

    print(calc(1,2))____

    print(calc(e=4,c=5,a=2,b=3))___

    print(calc(1,2,3))_____

    print(calc(1,2,3,e=4))____

    print(calc(1,2,3,d=5,4))_____

    2,(此题有坑)下面代码打印的结果分别是_________,________,________.

    def extendList(val,list=[]):
           list.append(val)
           return list
        list1 = extendList(10)
        list2 = extendList(123,[])
        list3 = extendList('a')

        print('list1=%s'%list1)
        print('list2=%s'%list2)
        print('list3=%s'%list3)

      

     

         3, 写代码完成99乘法表.(升级题)

    1 * 1 = 1 

    2 * 1 = 2 2 * 2 = 4 

    3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 

    ......

    9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81  

     

     

    # 2
    def num(*i):
        sum = 0
        for n in i:
            sum += int(n)
        return sum
    
    print(num(1,2,3,4,5,6,7,8,9))
    
    # 3
    '''
    a = 20
    b = 10
    c = None
    因为a = 10,b= 20,b传参给了a,a传参给了b,所以a = 20,b = 10.
    函数test5 没有return返回值 所以 c = None.
    '''
    
    # 4
    '''
    test5中打印的a = 3,b = 5
    c = None
    a = 10,b = 20
    test5中声名a = 3,b = 5
    test没有return返回值所以c = None
    a = 10,b = 20为全局作用域,所以最后打印 a = 10,b = 20.
    '''
    
    # 5
    def fun(*args):
        print(args)
    fun(*[1,2,3],*(22,33))
    
    # 6
    def fun(**kwargs):
        print(kwargs)
    fun(**{'name':'alex'},**{'age':1000})
    
    # 7
    # (1)
    a = 2
    def wrapper():
            print(a)
    wrapper()
    
    # (2)
    a = 2
    def wrapper():
        global a
        a += 1
        print(a)
    wrapper()
    
    # (3)
    def wrapper():
        a = 1
        def inner():
            print(a)
        inner()
    wrapper()
    
    # (4)
    def wrapper():
        a = 1
        def inner():
            nonlocal a
            a += 1
            print(a)
        inner()
    wrapper()
    
    # 8
    def convert(a,b):
        return a if a > b else b
    print(convert(233,666))
    
    # 9
    def fun(li):
        s = ""
        for i in li:
            s += str(i) + '_'
        print(s.strip("_"),end="")
    fun([1,'孙悟空','猪八戒'])
    
    # 10
    def convert(*args):
        dic = {}
        dic['max'] = max(args)
        dic['min'] = min(args)
        return dic
    print(convert(2,5,7,8,4))
    
    # 11
    def func(n):
        if n == 0:
            return True
        return n * func(n - 1)
    a = func(7)
    print(a)
    
    # 12
    def poke():
        li = ['','','','']
        li1 = ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']
        li2 = []
        for i in li:
            for n in li1:
                li2.append((i,n))
        return li2
    print(poke())
    
    # 13
    
    def wrapper():
        def inner():
            print(666)
        inner()
    wrapper()
    
    def wrapper():
        def inner():
            print(666)
        return  inner()
    wrapper()
    
    # 14
    # (1)
    '''
    1.2
    2.Error
    3.24
    4.8
    5.10
    6.Error
    '''
    # (2)
    '''
    list1=[10,'a']
    list2=[123]
    list3=[10,'a']
    '''
    
    # (3)
    def func(num):
        for i in range(1,num+1):
            for n in range(1,i+1):
                s = i * n
                print("%s * %s = %s   " % (i,n,s),end="")
            print(end="
    ")
    func(9)
  • 相关阅读:
    echarts labelLayout
    可视化学习及实战记录
    VS2008提示无法打开包括文件:“afxcontrolbars.h”解决办法
    原码、补码和反码
    第一篇
    vc2008编译就提示找不到msvcr90d.dll
    Vue H5 与 APP 交互 (IOS为例)
    VS Code中小程序与Vue常用插件合集(前端合集)
    如何在Element 使用正则表达式校验
    分享CSS公共类库(能在项目快捷使用CSS类)
  • 原文地址:https://www.cnblogs.com/zbw582922417/p/9451157.html
Copyright © 2011-2022 走看看