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之字典,你还记得吗?
Sep 20 Python
Python内建数据结构详解
Feb 03 Python
python查看微信好友是否删除自己
Dec 19 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
Python实现ATM系统
Feb 17 Python
django ORM之values和annotate使用详解
May 19 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 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模板,主要想体现一下思路
2006/12/25 PHP
php url路由入门实例
2014/04/23 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
Python3 操作符重载方法示例
2017/11/23 Python
详解python3中tkinter知识点
2018/06/21 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
Python如何进行时间处理
2020/08/06 Python
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
开学典礼感言
2014/02/16 职场文书
《逃家小兔》教学反思
2014/02/23 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
公司活动总结范文
2014/07/01 职场文书
酒桌上的开场白
2015/06/01 职场文书
餐馆开业致辞
2015/08/01 职场文书
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers
python实现手机推送 代码也就10行左右
2022/04/12 Python