zoukankan      html  css  js  c++  java
  • python3----函数、匿名函数

    本节将学习如何用Python定义函数,调用函数,以及学习匿名函数的使用

    1.定义函数

    Python中定义函数用关键字def,如下例所示,func为函数名

    def func():

           print( "hello world")

    2.函数参数

    一个函数可以有0个或多个形式参数:

    def test_add(x, y):

           print (x + y)

    函数的形式参数值可以初始化,使用了初始值的参数,在调用的时候可以不需要指定该参数。

    def test_sum(z, x = 1, y = 0):

           print(x + y + z)

    调用函数:

    test_sum(3) #   将打印出:4

    test_sum(10, y = 1) # 将打印出:12

    test_sum(y = 1, x = 2, z = 10) #将打印出:13

    注意:定义函数时,没有初始化的形式参数必须放在初始化形式参数的前面,否则会报错

            调用函数时,必须指定未初始化的参数,且参数的顺序要与函数定义的参数顺序一致(除非调用时指定了参数名)

    3.函数返回值

    Python函数可以通过return语句返回函数值,如果没有return语句或者return语句后什么都没有,函数将返回:None

    字典形参(**args)例子:

    def test_dict(a,**b):

           print('a is:',a)

           print( 'b is:',b)

    调用函数方法一:

    tict={'x':1, 'y':2,'z':3}
    test_dict(10, **tict)

    调用函数方法二:

    test_dict(10,x=1,y=2,z=3)

    输出结果:

    >>>
    a is: 10
    b is: {'y': 2, 'x': 1, 'z': 3}

    元组形参(*args)例子:

    def test_tuple(a,*b):

           print( 'a is :' ,a)

           print( b)

    调用函数方法一:

    tup = ('a', 1, 2, 'b')
    test_tuple(1, *tup)

    调用函数方法二:

    test_tuple(1, 'a', 1, 2, 'b')

    输出结果:

    >>>

    a is : 1

    ('a', 1, 2, 'b')

    5.匿名函数

    Python可以用关键字lambda定义一个匿名函数,当需要一个函数类型的对象时,可以创建一个匿名函数来实现

    def test_lambda(x):

           return lambda x:x+y     #这里将返回一个函数对象

    函数调用:

    f=test_lambda(10)  #创建了一个函数对象:f
    print( f(5) )       #将会打印出:15

    6.要点记录

    当多次调用一个具有初始化参数的函数时,该参数只会在第一次调用时被初始化一次。 这使得当形式参数为可变对象,如:列表、字典或者类的实例时,其结果可能和我们预期的不一样:

    def test_param(x=[]):

          x.append(10)

          print(x)

    多次调用函数(可能我们希望调用函数的结果是:都打印出列表[10]):

    testParam()
    testParam()
    testParam()
    testParam()

    实际输出结果:

    >>>
    [10]
    [10, 10]
    [10, 10, 10]
    [10, 10, 10, 10]

    当形式参数为不可变对象时,又是怎样的情况呢?我们再观察另一个例子:

    def testParam(x = 2):

           x=x + 2

           print(x)

    调用函数:

    testParam()
    testParam()
    testParam()
    testParam()

    实际输出结果:

    >>>
    4
    4
    4
    4

    备注:

    python中,万物皆对象。

    python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址。

    不可变对象(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)

    可变对象(mutable):字典型(dictionary)、列表型(list)、类的实例

  • 相关阅读:
    ExtJs005继承
    ExtJs004define定义类
    ExtJS笔记
    解决vscode-pandoc插件生成pdf中文显示问题
    UDP学习笔记(.NET)
    WPF类库不能添加资源词典(xaml)的解决办法
    解决win10下获取操作系统版本为6.2.900(win8)的问题
    [转] Unit Test 访问Internal类型和方法
    VS2017使用小技巧(持续更新。。。)
    [转]Github遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known host
  • 原文地址:https://www.cnblogs.com/jonm/p/8289216.html
Copyright © 2011-2022 走看看