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正则表达式介绍
Aug 06 Python
python执行子进程实现进程间通信的方法
Jun 02 Python
Python自动扫雷实现方法
Jul 25 Python
理解Python中的With语句
Mar 18 Python
详解Python文本操作相关模块
Jun 22 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
Python入门学习指南分享
Apr 11 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
python实现大学人员管理系统
Oct 25 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
python - asyncio异步编程
Apr 06 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数据库操作类(改自discuz)
2010/07/03 PHP
php多文件上传实现代码
2014/02/20 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
js版本A*寻路算法
2006/12/22 Javascript
静态的动态续篇之来点XML
2006/12/23 Javascript
很酷的javascript loading效果代码
2008/06/18 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
javascript判断数组内是否重复的方法
2015/04/21 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
python进程管理工具supervisor使用实例
2014/09/17 Python
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
Unicode和Python的中文处理
2017/03/19 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python API len函数操作过程解析
2020/03/05 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
用Python实现职工信息管理系统
2020/12/30 Python
毕业生找工作的自我评价
2013/10/18 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
心灵点滴观后感
2015/06/02 职场文书