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

      本章内容

        1、调用函数

        2、定义函数

        3、变量作用域

        4、使用main函数

        5、函数参数

        6、模块

    -----------------------------------

      函数就是一块重复利用的功能代码,是一个有名称的代码模块。

    1、调用函数

      内置函数,pow(x,y),它计算的是x ** y,即x的y次方;

      其中,pow 为函数名称,2 5 则是传递给函数的参数,返回值为 32。

      函数如果没有输入值,也需要添加括号,如下图:

      如果不加上括号,则提示这是一个功能模块;

      一定要注意的是:函数名不能做变量名;如果使用了函数名做变量名,Python中也是不会报错的;此时,再去调用函数功能,就会报错,如下图:

    2、定义函数

      下面,我们自己定义一个函数--计算圆面积的函数(圆的面积为 πr²),代码如下:

    # area.py
    import math
    def area(radius):
        """ Returns the area of a circle
        whith the given radius.
        For example:
        >>> area(5,5)
        95.0.33177771091246
        """
        return math.pi * radius ** 2

      此时,我们就可以像调用其他函数一样,调用这个 area 函数;

      如果想要答应其中的帮助文档,我们可以使用__doc__参数:

      函数的组成:

        def 为函数头部;函数头部行,和if while 头部都一样,需要以 : 结尾;

        函数头部后面定义的为函数名--area;

          函数名括号里面为变量名--radius,它是指函数所需要输入的参数;

        函数头部后面缩进的部分,全部称为函数体;

          函数体中,一般需要定义函数的功能名称,这是一个不错的选着,也可以不写,但是一般建议描述上;

          最后需要写入功能模块,也就是--“return math.pi * radius ** 2” 在return语句执行的时候,就可以跳出函数;

          return同时可以用来返回 math.pi * radius ** 2 的值,radius值就是在函数头部行中,函数名括号中定义的输入参数;

          函数并非必须包含return函数,但是如果没有,我们则认为函数结尾默认使用“return None”来做返回;如下面代码:

    # hello.py
    def say_hello_to(name):
        """ Prints a hello message.
        """
    
        cap_name = name.capitalize()  #capitalize() 功能在之间使用过,用来指定输入参数的首字母大写;
        print('Hello' + cap_name + ',how are you?')

    4、变量的作用

      函数带来一个重要的问题,就是作用域。变量的作用域指的是他在程序的那些地方可访问或可见。试看下面的程序:

    # local.py
    import math
    def dist(x,y,a,b):
        s = (x -a) ** 2 + (y - b) ** 2
        return math.sqrt(s)
    def rect_area(x,y,a,b):
        width = abs(x - a)
        heigth = abs(y - b)
        return width * height

      首先,在函数内部定义的变量,我们叫做局部变量--s;而函数 rect_area 有两个局部变量 width 和 heigth;同时,函数的参数也被视为局部变量--x,y,a,b;

      局部变量只能在当前函数模块中使用;

      除了局部变量,我们还有全局变量。全局变量自然就是在整个代码中都会被使用到。例如下面的代码:

    # global_error.py
    name = 'Jack'
    def say_hello():
        print('Hello ' + name + '!')
    def change_name(new_name):
        name = new_name

      上面的代码中,包含来个函数模块,say_hello 和 change_name,而 name 变量则是在全局下生效的;

      并且在 change_name() 函数中,又拥有name的局部变量,这时候,输入局部变量时候,依然会显示全局变量--Jack,所以,全局变量是优先于局部变量的;

      所以,为了区分局部变量与全局变量,我们需要使用关键字global;

    # global_correct.py
    name =  'Jack'
    def say_hello():
        print('Hello ' + name + '!')
    def change_name(new_name)
        global name  #在这里,我们需要通过global参数,没来指定全局变量;
        name = new_name

      运行结果如下:

     4、使用main函数

      main() 函数是作为所有函数的起点。例如在前面密码检查的代码中:

    # password2.py
    def main():
        pwd = input('What is the password? ')
        if pwd == 'apple':
            print('Logging on ...')
        else:
            print('Incorrect password.')
        print('All done!')

      所有的函数代码都位于mian()函数下面,我们需要运行 main() 来执行下面的代码;

    5、函数的参数

      给函数传递参数的时候,Python通过引用的方式来传递:

    # reference.py
    def add(a,b):
        return a + b

      运行结果如下:

      此时,x,y的值可以直接应用到函数中的a,b的值中去,这就叫引用的方式;

      有时候,这种引用的方式会带来一些问题,例如如下代码:

    # reference2.py
    def set1(x):
        x = 1

      此时,通过引用的方式将变量赋值为5,但是,在布局变量中 x 的值为1,但是输出依然为 m 原本对应的值 5 ,所以,在这种情况下,是没有实现变量引用的;

      有时候,我们需要给函数指定默认值:

    # greetings.py
    def greet(name,greeting = 'Hello'):
        print(greeting,name + '!')

      其中,定义了greeting = ‘Hello’ 为默认值。如果从新赋值,则会使用新的值;运行结果如下:

      关键字参数:

        在Python中,另外一种比较有用的参数指定方式是使用关键字。例如:

    # shopping.py
    def shop(where = 'store',what = 'pasta',howmuch = '10 pounds'):
        print('I want you to go to the' , where)
        print('and buy', howmuch , 'of' , what + '.')

        运行结果如下:

     6、模块

      模块是一列相关的函数和变量组合起来的一个功能代码块;

      它是一个 .py 的文件,直接在你的代码中调用这个 .py 的文件即可;用于在屏幕上打印形状的代码如下:

    # shapes.py
    """ A collection of functions
        for printing basic shapes.
    """
    
    CHAR = '*'
    def rectangle(heght,width):
        """ Prints a rectangle."""
        for row in range(height):
            for col in range(width):
                print(CHAR, end = '')
            print()
    def square(side):
      """ prints a square. """
      rectangle(side, side)
    def triangle(height):
    """Prints a right triangle. """ for row in range(height): for col in range(1, row + 2): print(CHAR, end = '') print()

      模块与常规Python程序的差别就是用途不同:模块是一个由函数组成的工具箱,用于编写其他程序。因此,模块通常没有mian()函数;

      使用模块方式如下:

    import shapes
    dir(shapes)
    print(shapes.__doc__)
    shapes.CHAR
    shapes.square(5)
    shapes.triangle(3)
    form shapes import *  #还可以导入模块的所有内容
    rectangle(3,8)

      名称空间:

      

  • 相关阅读:
    [原创]用C++类实现单向链表的增删查和反转操作
    [原创]c语言中const与指针的用法
    [原创]大连sap vt 实习生面试经历
    Android studio 相关错误处理
    Java 判断整数方法
    Android 网络编程
    Android 基础篇(二)
    Android ListView 的基本应用,包括缓存
    Java重点识记
    Android基础篇(一)
  • 原文地址:https://www.cnblogs.com/BurnovBlog/p/11117972.html
Copyright © 2011-2022 走看看