zoukankan      html  css  js  c++  java
  • python函数

    一、函数引入

       与数学中的函数不同,在Python中,函数不是看上去冰冷无聊的规则和公式,而是有实打实的、有自己作用的代码。比如说当我们需要实现“打印”这个功能,我们会用到print();当我们需要实现“获取数据长度”这个功能,我们会要到len()。这些都是设定好了,可以直接拿过来就用的功能,这就叫做“组织好的代码”。函数(Function)能实现的功能从简单到复杂,各式各样,但其本质是相通的:“喂”给函数一些数据,它就能内部消化,给你“吐”出你想要的东西。这就像自动贩卖机,只不过贩卖机是喂点钱,吐出来一些吃的喝的用的东西;而Python函数则是喂各种各样的数据,吐出来各种各样的功能。

    二、常用python函数

    你会发现图片里的函数后面都跟了个括号。而括号里放的东西,也就是我们需要输入的数据,它在函数中被称作【参数】。【参数】指向的是函数要接收、处理怎样的数据。

    比如print()函数的括号里可以放不同的参数,根据你放的参数不同,print()函数会帮你在屏幕上显示不同的内容。

    三、函数的格式

    1、函数的概念:

    函数是组织好的、可以重复使用,用来实现单一功能的代码

    (还是用贩卖机来打比方,贩卖机是设定好可以直接使用(组织好的),可以重复上架售卖不同的物品(重复使用),功能是卖东西(单一功能)。

    而函数呢?以print()函数为例,它也是设定好可以直接使用(组织好的),不论你想打印什么参数都可以(重复使用),而print函数能实现的单一功能就是“打印”。

    2、定义和调用函数

    1)定义函数的语法

    举例:

    定义一个打招呼的函数


    说明:(打招呼的英文是greet,你写say_hello或别的也行,其实理论上你随便起什么都可以,但别人也看得懂是最好的啦。)
    解读函数
    第1行:def的意思是定义(define),greet是【函数名】(自己取的),再搭配一个括号和冒号,括号里面的name是参数(参数名也是自己取)。
    第2行:def下一行开始缩进的代码是函数要实现的功能,也叫【函数体】。这里的函数体展现出的功能就是:打印出“name+ 早上好”这句话。
    第3行:一个简单的return。函数内部一旦遇到return语句,就会停止执行并返回结果。没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值(return None可以简写为return。)所以你也会看到,我们接下来的很多例子是省略了return语句的。
    函数注意事项
    1、#函数名:最好是取体现函数功能的名字,一般用小写字母和单下划线、数字等组合

    def greet(name):
    2、#参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
    3、#规范:括号是英文括号,后面的冒号不能丢
        print(name+'早上好')
    4、#函数体:函数体就是体现函数功能的语句,要缩进,一般是四个空格
     3、函数实践
       1)有入参
          def pika2(name):
        print('我最喜爱的神奇宝贝是'+name)
       2)没有入参
    def pika1():
        print('我最喜爱的神奇宝贝是皮卡丘')
    3)有多个入参 def pika3(name,person): print('我最喜爱的神奇宝贝是'+name) print('我最喜爱的驯兽师是'+person)

    四、函数调用
    1、举例:


    通过这个例子,我们明白调用函数最关键的是:得弄清楚这个函数有多少个参数,如何给参数赋值,这个过程在函数里叫做参数的传递(pass)。
    但函数的作用远不仅如此,它能将复杂的语句和功能统一封装进一个函数名里,调用者只需明白函数能实现什么,根据需要传递参数即可。
    2、函数的参数类型
    主要的参数类型有:位置参数、默认参数、不定长参数。我会用一个案例把这些参数串起来。
    1)位置参数

    def menu(appetizer,course):

        print('一份开胃菜:'+appetizer)
        print('一份主食:'+course+' ')
        #还记得转义字符 吧,表示换行

       menu('牛肉拉面','话梅花生')
       menu('话梅花生','牛肉拉面')

    #如果采用下面这种形式传递,就不需要理会参数位置
       menu(course='牛肉拉面',appetizer='话梅花生')


    2)默认参数:

    #因为已经默认将'绿豆沙'传递给dessert,调用时无须再传递。
    默认参数是可以改变的
    如下

    def menu(appetizer,course,dessert='绿豆沙'):
    print('一份开胃菜:'+appetizer)
    print('一份主食:'+course)
    print('一份甜品:'+dessert)

    menu('话梅花生','牛肉拉面')
    menu('话梅花生','牛肉拉面','银耳羹')
    #银耳羹对应参数dessert

    3、不定长参数

    盛夏来袭,你觉得卖烧烤是个不错的主意。但问题是每个人点的烤串数量都不同,你也不能限定死数量,这时候【不定长参数】就能派上用场,即不确定传递参数的数量。

    它的格式比较特殊,是一个星号*加上参数名,来看下面的例子
    你会发现输出的是这样的结果:('烤鸡翅', '烤茄子', '烤玉米'),这种数据类型叫做元组(tuple)
    默认参数也需要放在不定长参数的后面
    上面的函数可以写成:


    五、return语句
     1、返回单个参数

     

    2、返回多个参数

    返回的是('李若彤的脸蛋', '林志玲的身材')这样一个元组,对不对?又是元组。
    事实上,Python语言中的函数返回值可以是多个,而其他语言都不行,这是Python相比其他语言的简便和灵活之处。一次接受多个返回值的数据类型就是元组。
    最后需要再强调的是,没有return语句的函数会默认返回None值。
    return还有一个“副作用”:一旦函数内部遇到return语句,就会停止执行并返回结果。


    3、总结return


    六、变量作用域

      第一点:在一个函数内定义的变量仅能在函数内部使用(局部作用域),它们被称作【局部变量】。

      第二点:在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域),它们叫【全局变量】

    第一个输出为 88,第二个x为99
    注意:
    虽然变量的名字相同(都是x),但因为全局变量和局部变量处在不同的“作用域”中,所以它们彼此井水不犯河水,都能打印出相应的结果。
    但为了让程序更易读以及避免可能会出现的麻烦,建议局部变量和全局变量【不要】取相同的名字,以免混淆。
    你可以将定义的函数想象成一个私人房间,所以里面存数据的容器(变量)是私有的,只能在个人的房间里使用;而在函数外存数据的变量是公用的,没有使用限制。
    全局作用域中的代码中也不能使用任何局部变量,在函数内部的局部作用域,是可以访问全局变量的。

    局部变量转换为全局变量
    global

    
    
  • 相关阅读:
    开源中最好的Web开发的资源
    数据结构慕课PTA 05-树9 Huffman Codes
    【读书笔记】C++ primer 5th 从入门到自闭(一)
    【PTA】浙江大学数据结构慕课 课后编程作业 03-树1 树的同构
    nuvoton980 generate yaffs2 format rootfs (九)
    nuvoton980 burn firmware to spi-nand (八)
    nuvoton980 kernel support bridge and nat(七)
    nuvoton980 kernel support tf card(六)
    nuvoton980 kernel support leds-gpio (五)
    nuvoton980 kernel support spi nand boot and rtc (四)
  • 原文地址:https://www.cnblogs.com/mml-blog/p/10581054.html
Copyright © 2011-2022 走看看