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实现代理服务功能实例
Nov 15 Python
python中函数默认值使用注意点详解
Jun 01 Python
python基础教程项目五之虚拟茶话会
Apr 02 Python
python调用API实现智能回复机器人
Apr 10 Python
python 显示数组全部元素的方法
Apr 19 Python
wxPython的安装与使用教程
Aug 31 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
python编写简单端口扫描器
Sep 04 Python
什么是Python包的循环导入
Sep 08 Python
python利用opencv实现颜色检测
Feb 23 Python
浅谈Python数学建模之固定费用问题
Jun 23 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
PHP 中常量的知识整理
2017/04/14 PHP
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
[01:21]2018DOTA2亚洲邀请赛4.5采访 打DOTA2也能有女朋友?
2018/04/06 DOTA
浅析Python中的多重继承
2015/04/28 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
keras 多任务多loss实例
2020/06/22 Python
python wsgiref源码解析
2021/02/06 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
个人求职简历中英文自我评价
2013/12/16 职场文书
同志主要表现材料
2014/08/21 职场文书
党课心得体会范文
2014/09/09 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
标准发言稿结尾
2019/07/18 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python