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的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
详解Python的Django框架中的模版相关知识
Jul 15 Python
Python中使用Queue和Condition进行线程同步的方法
Jan 19 Python
python模块之re正则表达式详解
Feb 03 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
python scipy卷积运算的实现方法
Sep 16 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
django rest framework 自定义返回方式
Jul 12 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 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
3.从实例开始
2006/10/09 PHP
php数组去重的函数代码
2013/02/03 PHP
PHP读取大文件的类SplFileObject使用介绍
2014/04/09 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
javascript 常用功能总结
2012/03/18 Javascript
你必须知道的Javascript知识点之"单线程事件驱动"的使用
2013/04/23 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JavaScript中使用Object.prototype.toString判断是否为数组
2015/04/01 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
简单理解js的冒泡排序
2016/12/19 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
2018/09/20 jQuery
用Python实现命令行闹钟脚本实例
2016/09/05 Python
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
python实现生成字符串大小写字母和数字的各种组合
2019/01/01 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
商场收银员岗位职责
2015/04/07 职场文书
2015年纪委工作总结
2015/05/13 职场文书
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers