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多线程编程(七):使用Condition实现复杂同步
Apr 05 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
python导入坐标点的具体操作
May 10 Python
python3 深浅copy对比详解
Aug 12 Python
python实现大学人员管理系统
Oct 25 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 Python
django日志默认打印request请求信息的方法示例
May 17 Python
python读取hdfs上的parquet文件方式
Jun 06 Python
简单介绍Python的第三方库yaml
Jun 18 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/10/09 PHP
php中error与exception的区别及应用
2014/07/28 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
numpy数组拼接简单示例
2017/12/15 Python
python处理document文档保留原样式
2019/09/23 Python
如何解决安装python3.6.1失败
2020/07/01 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
Python的logging模块基本用法
2020/12/24 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
群众路线组织生活会发言材料
2014/10/17 职场文书
财产分割协议书范本
2014/11/03 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
为Centos安装指定版本的Docker
2022/04/01 Servers
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL