博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
05 函数
阅读量:5292 次
发布时间:2019-06-14

本文共 3976 字,大约阅读时间需要 13 分钟。

  本章内容

    1、调用函数

    2、定义函数

    3、变量作用域

    4、使用main函数

    5、函数参数

    6、模块

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

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

 

1、调用函数

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

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

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

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

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

 

2、定义函数

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

# area.pyimport mathdef 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.pydef say_hello_to(name):    """ Prints a hello message.    """    cap_name = name.capitalize()  #capitalize() 功能在之间使用过,用来指定输入参数的首字母大写;    print('Hello' + cap_name + ',how are you?')

 

4、变量的作用

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

# local.pyimport mathdef 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.pyname = '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.pyname =  'Jack'def say_hello():    print('Hello ' + name + '!')def change_name(new_name)    global name  #在这里,我们需要通过global参数,没来指定全局变量;    name = new_name

  运行结果如下:

 

 4、使用main函数

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

# password2.pydef 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.pydef add(a,b):    return a + b

  运行结果如下:

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

 

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

# reference2.pydef set1(x):    x = 1

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

 

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

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

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

 

  关键字参数:

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

# shopping.pydef 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 shapesdir(shapes)print(shapes.__doc__)shapes.CHARshapes.square(5)shapes.triangle(3)form shapes import *  #还可以导入模块的所有内容rectangle(3,8)

 

  名称空间:

  

 

转载于:https://www.cnblogs.com/BurnovBlog/p/11117972.html

你可能感兴趣的文章
SSH框架是个怎么回事?
查看>>
如何回报项目状态
查看>>
bootstrap3
查看>>
MySQL创建数据库和数据库表
查看>>
Codeforces Round #423 (Div. 2) C 思维,并查集 或 线段树 D 树构造,水
查看>>
Educational Codeforces Round 26 D dp,思维
查看>>
Spring Boot使用Servlet、Filter或Listener的方式
查看>>
ecshop中 transport.js/run() error:undefined
查看>>
POJ 1321 棋盘问题(DFS)
查看>>
mybatis中if及concat函数的使用
查看>>
第四周作业
查看>>
在ListView中获取当前行的索引
查看>>
Android 创世纪 第一天
查看>>
[重温数据结构]一种自平衡二叉查找树avl树的实现方法
查看>>
Java并发编程实战 第3章 对象的共享
查看>>
多线程系列(三):线程池基础
查看>>
【转载】数据库读写分离和垂直分库、水平分表
查看>>
String、StringBuffer和StringBuilder的区别
查看>>
mac terminal基本命令
查看>>
IntelliJ Idea 2017 免费激活方法
查看>>