zoukankan      html  css  js  c++  java
  • Python 函数定义以及参数传递

    Python 函数定义以及参数传递
    1.函数定义
    #形如
    def func(args...):
    doSomething
    1
    2
    3
    以关键字def 开头,后面是函数名和参数下面是函数处理过程。
    举例:

    def add( a, b ):
    return a+b
    1
    2
    参数可以设定默认值,如:

    def add( a, b=10 ): #注意:默认值参数只会运算一次
    return a+b
    1
    2
    默认值参数只会运算一次是什么意思?

    def func( a, b=[] ): #b的默认值指向一个空的列表,每次不带默认值都会指向这块内存
    b.append(a)
    return b

    print(func(1))#向默认的空列表里加入元素1 ,默认列表里已经是[1]
    print(func(2))#向默认的列表里加入元素2,默认列表里已经是[1,2]

    print(func(3,[]))#向b指向的空列表里加入元素1 ,默认列表里还是[1,2]
    print(func(4))#向默认的列表里加入元素4,默认列表里已经是[1,2,4]
    '''
    结果:
    [1]
    [1, 2]
    [3]
    [1, 2, 4]
    '''
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    这下明白为什么默认参数只计算一次了吧,函数参数不传递时默认值总是指向固定的内存空间,就是第一次计算的空间。

    2.参数传递
    def func(a, b):
    print('a=%d, b=%d' % (a,b) )
    1
    2
    在使用函数时可以如下方式,结果都是相同的

    func(10,20) #不使用参数名,需要按参数顺序传递
    func(a=10,b=20) #使用参数名可以不按顺序传递
    func(b=20,a=10)
    #结果:
    a=10, b=20
    a=10, b=20
    a=10, b=20
    1
    2
    3
    4
    5
    6
    7
    如果函数定义形式如下方式:

    def func(*args): #这种定义会把传递的参数包成元组
    print(args,type(args))

    func(10,20)
    #结果:
    #(10, 20) <class 'tuple'>
    1
    2
    3
    4
    5
    6
    7
    举一个和上述过程相反的例子:

    def func(a,b):
    print('a=%d, b=%d' % (a,b) )

    a = (10, 20)
    func(*a) #在调用函数使用`*`则会把元组解包成单个变量按顺序传入函数
    #结果:a=10, b=20
    1
    2
    3
    4
    5
    6
    总结:*号在定义函数参数时,传入函数的参数会转换成元组,如果 *号在调用时则会把元组解包成单个元素。
    另一种定义:

    def func(**kw):#使用**定义参数会把传入参数包装成字典dict
    print(kw, type(kw) )

    func(a=10,b=20)#这种函数在使用时必须指定参数值,使用key=value这种形式
    #结果:{'b': 20, 'a': 10} <class 'dict'>
    1
    2
    3
    4
    5
    相反的例子:

    def func(a,b):
    print('a=%d, b=%d' % (a,b) )

    d = {'a':10, 'b':20 }
    func(**d) #在调用时使用**会把字典解包成变量传入函数。
    1
    2
    3
    4
    5
    def func(*args, **kw):#这种形式的定义代表可以接受任意类型的参数
    print(args,kw )
    1
    2
    总结:**号在定义函数参数时,传入函数的参数会转换成字典,如果 **号在调用时则会把字典解包成单个元素。
    lambda表达式
    lambda表达式就是一种简单的函数
    形如 f = lambda 参数1,参数2: 返回的计算值
    例如:

    add = lambda x,y: x+y
    print(add(1,2))
    '''
    结果:3
    '''
    ---------------------
    作者:a540366413
    来源:CSDN
    原文:https://blog.csdn.net/a540366413/article/details/56487929
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    【GIS】SuperMap加载三维服务
    【GIS】SuperMap-Web3D-Sql查询示例
    【GIS】Cesium绘制轨迹线
    【GIS】Cesium地下模式设置
    【Java】jfinal-layui:org.postgresql.util.PSQLException: ERROR: syntax error at or near "value" 位置:11
    【Java】jfinal-layui、postgres
    【JavaScript】js注入
    【可视化】地质油藏可视化之四-面元渐进涂色
    【可视化】地质油藏可视化之三-基于threejs绘制三维zmap数据
    【可视化】地质油藏可视化之一-zmap数据转换
  • 原文地址:https://www.cnblogs.com/ExMan/p/10136094.html
Copyright © 2011-2022 走看看