Python学习笔记之函数的定义和作用域实例详解


Posted in Python onAugust 13, 2019

本文实例讲述了Python函数的定义和作用域。分享给大家供大家参考,具体如下:

定义函数

默认参数: 可以向函数中添加默认参数,以便为在函数调用中未指定的参数提供默认值

# 如果调用 cylinder_volume 函数时,不提供radius参数,那么radius的值为5
def cylinder_volume(height, radius=5):
  pi = 3.14159
  return height * pi * radius ** 2

向函数中的参数传值的方法:按照位置和按照名称

cylinder_volume(10, 7) # 1539.3791
cylinder_volume(height=10, radius=7) # 1539.3791
cylinder_volume(radius=7, height=10) # 1539.3791

注意:上述第一种是常用的按照位置传值,第二种和第三种是按照名称传值

定义函数[相关练习]

写一个名称为 population_density 的函数,该函数有两个参数 population 和 land_area,并根据这两个值返回人口密度。

解决方案:

def population_density(population, land_area):
  return population / land_area
test1 = population_density(10, 1)
expected_result1 = 10
print("expected result: {}, actual result: {}".format(expected_result1, test1)) # expected result: 10, actual result: 10.0
test2 = population_density(864816, 121.4)
expected_result2 = 7123.6902801
print("expected result: {}, actual result: {}".format(expected_result2, test2)) # expected result: 7123.6902801, actual result: 7123.690280065897

写一个叫做 readable_timedelta 的函数,该函数有一个参数:整数 days,并返回一个表示由多少周多少天组成的字符串。例如 readable_timedelta(10) 应返回“1 week(s) and 3 day(s).”。

解决方案:

def readable_timedelta(days):
  weeks = int(days / 7)
  day = days % 7
  return str(weeks) + ' week(s) and ' + str(day) + ' day(s).'
print(readable_timedelta(10)) # 1 week(s) and 3 day(s).

函数中的变量作用域

  • 变量作用域是指可以在程序的哪个部分引用或使用某个变量。
  • 在函数中使用变量时,务必要考虑作用域。如果变量是在函数内创建的,则只能在该函数内使用该变量。你无法从该函数外面访问该变量。

错误的示例:

# This will result in an error
def some_function():
  word = "hello"
print(word)

这意味着你可以为在不同函数内使用的不同变量使用相同的名称, 正确的示例如下:

def some_function():
  word = "hello"
def another_function():
  word = "goodbye"

在函数之外定义的变量依然可以在函数内访问。

word = "hello"
def some_function():
  print(word)
print(word)

Best Practise:建议将变量定义在所需的最小作用域内。虽然函数可以引用在更大的作用域内定义的变量,但是通常不建议这么做,因为如果程序有很多变量,你可能不知道你定义了什么变量。

注意:Python 不允许函数修改不在函数作用域内的变量,执行下列代码,看发生了什么

egg_count = 0
def buy_eggs():
  egg_count += 12 # purchase a dozen eggs
buy_eggs()

此时会发生错误, 导致 UnboundLocalError : 当我们尝试将函数外的一个变量的值更改或重新赋值为另一个值时,我们将遇到这个错误, 但是这个原则仅适用于整数和字符串, 列表、字典、集合、类中可以在子程序中(子函数)通过修改局部变量达到修改全局变量的目的。

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python正则表达式match和search用法实例
Mar 26 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Python 基础教程之包和类的用法
Feb 23 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
django中的图片验证码功能
Sep 18 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
Aug 13 #Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 #Python
Python 写入训练日志文件并控制台输出解析
Aug 13 #Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 #Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 #Python
Django项目中实现使用qq第三方登录功能
Aug 13 #Python
一篇文章搞定Python操作文件与目录
Aug 13 #Python
You might like
php中mysql操作buffer用法详解
2015/03/19 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
Python实现远程调用MetaSploit的方法
2014/08/22 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Flask框架信号用法实例分析
2018/07/24 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
python批量爬取下载抖音视频
2019/06/17 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Python3获取cookie常用三种方案
2020/10/05 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
给排水工程师岗位职责
2013/11/21 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
音乐之声观后感
2015/06/04 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android