• 【Python】Java程序员学习Python(五)— 函数的定义和使用


      不想做一个待宰的羔羊!!!!要自己变得强大。。。。

      函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍,方法的目的还是重用和封装

    一、方法的定义

      方法的定义使用关键词def来定义,定义格式如下:

    def 方法名(参数定义):
        方法体
    • 方法名:方法名的规范同变量名规范一样
    • 参数定义:比较复杂,后面会进行讲解
    • 冒号:这个类似于Java的{},必不可少
    • 方法体:方法实现的功能在此定义即可

      简单的例子:

    #定义sayHello
    def sayHello():
        print('hello yiwangzhibujian')
    #调用方法
    sayHello()

      基本用法还是很简单的,深入起来也不难。 

    二、方法的返回值

      返回值的关键字使用return,一般来说,所有的方法都是有返回值的,如果方法没有使用return,那么Python会在代码结束的时候自动添加:return None

      返回值的用法和Java语言一样,用来返回结果或者提前结束方法,但是也有一些不一样的地方

    2.1 返回多个结果

      这是一个比较特殊的功能,可以返回多个值,实际上返回的是一个tuple,返回值的使用方法和tuple的使用方法是一样的,简单例子如下:

    def returnMulti():
        return 1,2,3
    result=returnMulti()
    print(result)
    print(isinstance(result, tuple))
    ========控制台输出========
    (1, 2, 3)
    True

      所以定义函数的时候写好注释,让使用者明确知道返回值的类型。

    2.2 返回函数

      除了能够返回数值以后,还能返回一个函数,因为函数也是一个变量。感觉和js一模一样。

    三、方法的参数

      方法参数的情况就比较多了,除了基本用法以外,其他的也需要好好掌握。

    3.1 方法的重载

      因为参数没有了类型,所以Python的函数的重载不能靠参数类型了,而只能靠参数的个数,这一点还是比较头疼的,类型需要在方法体内进行判断。

    3.2 参数默认值

      当需要传入多个参数的时候,如果有的参数的值使用频率非常高,可以把这个值设置为默认值,这样方便使用。

      比如说字符串转换数字的全局函数:int()

    • 一个参数的定义:int(x=0)
    • 两个参数的定义:int(x, base=10)

      当只有一个参数的时候,即便不输入,也有一个默认值为0:

    print(int())
    print(int(0))
    print(int('0'))

      因此上面三个输出均为0。

      当然一般的字符串转数字都是十进制,所以把10当做默认的进制,当然如果需要转换二进制,也是可以设置参数的,这就需要主动设置了:

    print(int('10'))
    print(int('10',base=10))
    print(int('10',base=2))
    =========控制台输出=========
    10
    10
    2

      这就是默认值的基本用法,但有一点要注意的,默认参数默认值必须放在普通参数后面。 

    3.3 可变参数

      可变参数和Java的可变参数是一样的,用来代表同一处理方式的数量不确定的参数,只是表现形式不一样,下面示例方法打印实际传入方法的参数,具体实现可以根据实际情况来:

    def see(*nums):
        print(nums)
        print(isinstance(nums, tuple))
    
    see(1,2,3)
    =========控制台输出=========
    (1, 2, 3)
    True

      由此可知,可变参数实际上是以tuple的形式传入方法内部的。使用可变参数也要注意以下事项:

    • 一个方法只能有一个可变参数
    • 可变参数必须放在默认参数的后面 

    3.4 关键字参数

      可变参数还是有它的缺点的,就是只能是同一种元素的多个值,用在不需要区分每个值类型的情况下才能使用,但是当需要区分的时候则需要使用关键字参数,可以连同这个参数的名称一起传进来:

    def see(**keyvalue):
        print(keyvalue)
        print(isinstance(keyvalue, dict))
    
    see(a=1,b=2,c=3)
    =======控制台输出=======
    {'a': 1, 'b': 2, 'c': 3}
    True

      可以发现,实际上Python把关键字参数封装成一个dict并传入到方法内,这样拿到它后就可以进行使用,至于用法等你有这个需求的时候就可以使用了。

      关键字参数的输入也是可以加以限制的,使用*分割,后面的即是限定的输入名称:

    def info(name,age,*,country,city):
        print(name,age,country,city)
    
    info('yiwangzhibujian',27,country='Chine',city='BeiJing')
    =========控制台输出===========
    yiwangzhibujian 27 Chine BeiJing

      当然如果关键字参数指定需要的参数值,但是却没有输入的时候,还是会报错的,因此也是可以给关键字参数加上默认值的:

    def info(name,age,*,country=’China',city):
        print(name,age,country,city)

      如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了,例如:

    def person(name, age, *favoNum, country, city):
        print(name, age, favoNum, country, city)

      掌握以上基本用法就可以了。

    3.5 各种类型参数的混用

      参数类型多了,怎么使用就很头痛,顺序错了还不行。顺序如下:普通参数、默认参数、可变参数、关键字参数。

    四、函数的其他应用

    4.1 空函数

      当我们定义了一个参数时,如果还没有想好怎么实现,空着的话是会报错的,这时候可以使用pass来表示空着的函数:

    def me():
        pass

      这样的话运行就不会报错了,等以后想好实现再来补充。

    4.2 参数类型检查

      因为Python不是强类型语言,所以参数的类型是不能确定的,可是当我们在参数类型不确定的情况下去假定它的类型并使用它,就会发生异常,因此对传入参数进行类型检查就是有必要的,当传入错误的参数可以进行有效的提醒,参数类型检查使用前面讲过的全局函数isinstance()即可,函数具体使用方法详见:Java程序员学习Python(四)— 内置方法和内置变量中isinstance()的介绍。

    4.3 传入函数

      既然前面说过函数也是一个对象,那么Python也是允许传入一个方法的。例如定义一个判断方法:

    def judge(fun,*num):
        return fun(num)
    print(judge(max,1,2,3))
    print(judge(min,1,2,3))
    ==========控制台输出===========
    3
    1

      这样就根据传入的方法来获取指定的数字,当然参数类型检查还是有必要的,不然对一个不是函数的参数调用方法肯定是会报错的。

    4.4 文档中方法的描述形式

      学习Python的过程中还是要经常看文档的,关于文档中对函数的描述简单介绍下,首先你要掌握上面的几种参数类型,这是基本的要求。还有就是对中括号的理解:

      例如:str.endswith(suffix[, start[, end]]),中括号代表参数可选择输入,不是必填项,当然可选择也代表着有默认值,注意查看函数的定义,也就是说,这个函数可以如此输入:

    str.endswith(suffix)
    str.endswith(suffix, start)
    str.endswith(suffix, start, end)

      这个了解即可,实际定义函数的时候不能这么定义。

    4.5 对函数的深层理解

      函数也是一个对象和js类似,方法名只是指向函数对象的一个引用,这种特性会有以下效果:

    print(abs(-1))
    abs2=abs
    print(abs2(-1))

      这个只是基本理解,后续学习后的理解会再来补充。。

  • 相关阅读:
    (1)ASCⅡ码与一般乘除与逻辑指令
    (2)串指令的传送
    【转】伟大的代码(97年的Mekka ’97 4K Intro比赛的一等奖作品)汇编机器码
    第四次游戏革命:全息游戏 from:http://www.cnblogs.com/alamiye010/archive/2012/08/15/2640881.html
    sqlce wp
    wp7 blogs
    单例的两种实现方式
    C# event from:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html#a4
    wp7——sqlite数据库操作 from:http://blog.csdn.net/wp_lijin/article/details/7370790
    Linq C#增删改查
  • 原文地址:https://www.cnblogs.com/yiwangzhibujian/p/6985189.html
Copyright © 2020-2023  润新知