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 相关文章推荐
Flask框架的学习指南之用户登录管理
Nov 20 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
python导入模块交叉引用的方法
Jan 19 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
Python代码太长换行的实现
Jul 05 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
Python如何将函数值赋给变量
Apr 28 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 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正则校验用户名介绍
2008/07/19 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
yii的CURD操作实例详解
2014/12/04 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
window.open的功能全解析
2006/10/10 Javascript
javascript 网页跳转的方法
2008/12/24 Javascript
javascript IFrame 强制刷新代码
2009/07/23 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python字符遍历的艺术
2008/09/06 Python
在Python程序中操作MySQL的基本方法
2015/07/29 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
Python数据结构之单链表详解
2017/09/12 Python
新手学python应该下哪个版本
2020/06/11 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
幼儿园元旦亲子活动方案
2014/02/17 职场文书
小学生优秀评语大全
2014/04/22 职场文书
公务员年度个人总结
2015/02/12 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
比较几种Redis集群方案
2021/06/21 Redis