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

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

调用函数

1、调用函数有两种方式,

一种是内置函数(相当于C和C++中的库函数),另一种是自定义的函数,我们先来看下内置函数的使用,比如pow(x,y),计算x ** y,即x的y次方:

python中,变量名都没有类型定义的,这点与C和C++不同,因此,在定义变量的时候,不要与内置函数冲突,否则定义的时候不报错,使用函数的时候会报错,例如:

定义函数

python中定义函数用def关键,并且没有返回类型,与C和C++不一样的定义方式,函数名与变量命名一样,只能包含字母、数字和下划线,且不能以数字开头,这点与C和C++一样。

 

#area.pyimport mathdef area(radius):    """returns the area of a circle with the given radius.    for example:    >>> area(5.5)    95.033177771091246    """    return math.pi * radius ** 2print("area(5)==========", area(5))

与内置函数一样,可以轻松地查看自己编写的函数的文档字符串,如下所示:

python 函数也可以不带返值,例如:

 

#notReturnValue.pydef say_hello_to(name):    """Prints a hello message.    """    cap_name = name.capitalize()print(say_hello_to('aa'))

变量作用域

函数带来的一个重要问题是作用域。这点与C和C++类似,只最局部变量以代码块所在的区域为限,参数也是局部变量,例如:

 

#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)    height = abs(y - b)    return width * height

函数结束时,其局部变量被自动删除。

全局变量

在函数外面声明的变量称为全局变量,程序中的任何函数或代码都可读取它。然而,在函数中不能直接给全局变量赋值,python会把在函数内的同名变量当做局部变量处理。例如:

 

#global_error.pyname = 'Jack' #name为全局变量def say_hello():    print('Hello ' + name + '!')def change_name(new_name):    name = new_name #name当作局部变量处理

从调用change_name的结果看,并不符合预期,全局变量name的值并没有变,依然是'Jack'。问题在于Python将函数change_name中的变量name视为局部变量,因此修改的并非全局变量name。(这 点与C和C++不同)

要访问全局变量,必须使用关键字glogbal:

 

#global_correct.pyname = 'Jack'def say_hello():    print('Hello ' + name + '!')def change_name(new_name):    global name    name = new_name

使用main函数

在你编写的任何Python程序中,通常都至少应该使用一个函数:main()。根据约定,main()函数被认为是程序的超点。例如,编写前一章的密码检查程序时,可使用main函数:

 

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

函数参数

1.按引用传递,Python采用按引用传递参数,(C++可按值和引用两种方式传递参数),这意味首当你传递参数时,函数将使用新变量名来引用原始值。例如:

 

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

启动IDLE的交互式命令,并这样做:

按引用传递简单而高效,但有些事情它做不了,例如,请看面这这个名不副实的函数:

 

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

函数set1想将传入的变量的值设置为1,但如果你尝试运行它,结果并不符合预期:

m的值根本没变,太令人意外了。这都是按引用传递导致的。为帮助理解,将这个示例分解成下面几步:

1。将5赋给m。

2。调用set1(m):将m的值赋给x,这样m和x都指向5。

3。将1赋给x,结果如图5-4所示。

4。函数set1结束后,x被删除。

在函数set1中,根本不能访问变量m,因此无法修改它指向的值。

默认值

给参数指定默认值通常很有帮助。例如:在下面的函数中,给参数greeting指定了默认值'Hello':

 

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

两种不同的方式调用函数greet

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

 

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

调用使用关键字参数的函数时,以param = value的方式传递数据。例如:

关键字参数有两大好处。首先,它们清晰地指出了参数值,有助于提高程序的可读性;其次,关键字参数的顺序无关紧要。对于包含大量参数的函数来说,这两点都很有帮助,因为很难记住这些函数的参数的顺序和含义。

模块

模块是一系列相关的函数和变量。

要创建模块,可创建一个.py文件。在其中包含用于完成任务的函数。例如,下面是一个简单的模块,用于在屏幕上打印形状:

 

#shapes.py"""A collection of functions for printing basic shapes."""CHAR = '*'def rectangle(height, 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程序之间唯一的差别是用途不同:模块是一个由函灵敏组成的工具箱,用于编写其他程序。因此,模块通常没有main()函数。

要使用模块,只需导入它即可。例如:

名称空间

对于模块,很有用的一点是它们形成名称空间。名称空间基本上就是一组独特的变量名和函数名。要让模块中的名称在模块外面可见,你必须使用import 语句。

转载地址:http://guiub.baihongyu.com/

你可能感兴趣的文章
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>