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的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
Python运算符重载详解及实例代码
Mar 07 Python
Python基于dom操作xml数据的方法示例
May 12 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
Python日志logging模块功能与用法详解
Apr 09 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 Python
实战Python爬虫爬取酷我音乐
Apr 11 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验证码类(分享)
2013/08/06 PHP
php获得url参数中具有&的值的方法
2014/03/05 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
PHP解析RSS的方法
2015/03/05 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
jQuery实现tab标签自动切换的方法
2015/02/28 Javascript
jQuery实现统计输入文字个数的方法
2015/03/11 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
python数组复制拷贝的实现方法
2015/06/09 Python
常用python编程模板汇总
2016/02/12 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
python format 格式化输出方法
2018/07/16 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
python 多线程重启方法
2019/02/18 Python
Python的UTC时间转换讲解
2019/02/26 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
2020/02/27 Python
浅谈django 重载str 方法
2020/05/19 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
绩效管理实施方案
2014/03/19 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
实验心得体会范文
2016/01/25 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android