Burnov

导航

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)

 

  名称空间:

  

 

posted on 2019-07-02 17:15  Burnov  阅读(234)  评论(0编辑  收藏  举报