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 and、or以及and-or语法总结
Apr 14 Python
Python 异常处理的实例详解
Sep 11 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
Python实现的对一个数进行因式分解操作示例
Jun 27 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Python 内置变量和函数的查看及说明介绍
Dec 25 Python
Python处理mysql特殊字符的问题
Mar 02 Python
Django bulk_create()、update()与数据库事务的效率对比分析
May 15 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
Pycharm Plugins加载失败问题解决方案
Nov 28 Python
python lambda的使用详解
Feb 26 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代码
2010/08/08 PHP
php 获取本地IP代码
2013/06/23 PHP
php给图片加文字水印
2015/07/31 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
JavaScript中常用的验证reg
2016/10/13 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
Python获取时间戳代码实例
2019/09/24 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
医学护理系毕业生求职信
2013/10/01 职场文书
安全生产检讨书
2014/01/21 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
体育专业求职信
2014/07/16 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript