目录

  • def语句和参数
  • 返回值和return语句
  • None值
  • 关键字参数和print()
    • print(,end='')
    • print(,sep='')
  • 局部和全局作用域
  • global语句
  • 异常处理

第一章我们学习了print()、input()、len()这样的python内建函数,其实我们也可以自己编写函数。这些函数就像一些有特定功能的小版块,我们可以在想要的时候随时调用他们。

def语句和参数

先看一个栗子

def hello(name):print('Hello '+name)
hello('Doraemon')
hello('Nobita')

运行程序,输出如下结果:

Hello Doraemon
Hello Nobita

解释:在这个程序的hello()函数定义中,有一个名为name的变元。“变元”是一个变量,当函数被调用时,参数就存放在其中。需注意的是,==保存在变元中的值,在函数返回后就丢失了。==比如在hello(‘Nobita’)之后添加print(name),程序会报NameError,因为没有名为name的变量。在函数调用hello(‘Nobita’)之后,这个变量就被销毁了。

返回值和return语句

一般来说,函数调用求值的结果,成为函数的“返回值”。用def语句创建函数时,可以用return语句制定应该返回什么值。return语句包含以下部分:

  • return关键字
  • 函数应该返回的值或表达式
    返回值可以作为参数传递给另一个函数调用。

None值

None是NoneType数据类型的唯一值。如果你希望变量中存储的东西不会与一个真正的值混淆,这个没有值的值就可能有用。

关键字参数和print()

“关键字参数”是由函数调用时加在它们前面的关键字来识别的。关键字参数通常用于可选变元。例如,print()函数有可选变元end和sep,分别指定在参数末尾打印什么,以及在参数之间打印什么来隔开他们。

print(,end=’’)

如果运行以下程序:

print('Hello')
print('Doraemon')

输出将会是:

Hello
Doraemon

这两个字符串出现在独立的两行中 ,因为print()函数自动在传入的字符串末尾添加了换行符。但是可以设置end关键字参数,将它变成另一个字符串。例如:

print('Hello',end='')
print('Doraemon')

输出就会像这样:

HelloDoraemon

'Hello’后面不再打印换行,而是打印了一个空字符串。

print(,sep=’’)

类似地,如果向print()传入多个字符串值,该函数就会自动用一个空格分隔他们。例如:

print('Nobita','Doraemon')

输出将会是:

Nobita Doraemon

你可以传入sep关键字参数,替换掉默认的分隔字符串。如:

print('Nobita','Doraemon',sep=',')

输出将会是:

Nobita,Doraemon

局部和全局作用域

在被调用函数内赋值的变元和变量,处于该函数的局部作用域。在所有函数之外赋值的变量,属于全局作用域。
一个函数被调用时,就创建了一个局部作用域。在这个函数赋值的所有变量,存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了,这些变量就丢失了。作用域很重要,理由如下:

  • 全局作用域中的代码不能使用任何局部变量
def spam():eggs = 520
spam()
print(eggs)

如果运行这个程序,python将报错,因为eggs为局部变量,在spam()函数返回时,局部作用域就销毁了,变量就丢失了,所以程序报错。

  • 但是局部作用域可以访问全局变量
def spam():print(eggs)
eggs = 42
spam()
print(eggs)

运行程序输出的结果为42

  • 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
def spam():eggs = 99bacon()#eggs在bacon被调用时销毁print(eggs)
def bacon():ham = 101eggs = 0spam()

运行程序输出的结果为99。一个函数中的局部变量完全与其他函数中的局部变量分隔开来。

  • 如果在不同的局部作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名为spam的局部变量,和一个名为spam的全局变量。
    在python中让局部变量和全局变量同名是完全合法的,但是为避免麻烦,尽量避免。

global语句

如果需要在一个函数内修改全局变量,就是用global语句。

def spam():global eggseggs = 'spam'print(eggs)
eggs = 'global'
spam()
print(eggs)

运行程序输出的结果为spam。
有四条法则,来区分一个变量是处于局部作用域还是全局作用域:
1.如果变量在全局作用域中使用(即所有函数之外),他就总是局部变量。
2.如果在一个函数中,有针对变量的global语句,他就是全局变量。
3.否则,如果该变量用于函数中的赋值语句,他就是局部变量。
4.但是,如果该变量没有用在赋值语句中 ,他就是全局变量。
为方便理解,可以使用以下代码:

def spam():global eggs  eggs = 'spam'  #全局变量
def bacon():eggs = 'bacon'  #局部变量
def ham():print(eggs)   #全局变量eggs = 42  #全局变量
spam()
print(eggs)

异常处理

错误可以由try和except语句来处理。那些可能出错的语句放在try子句中,如果错误发生,程序执行就转到接下来的except子句开始处。在运行那些代码后,执行照常继续。

def spam(divideBy):try:return 42 / divideByexcept ZeroDivisionError:print('Error:Invalid arrgument.')print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))

程序运行结果如下:

21.0
3.5
Error:Invalid arrgument.
None
42.0

看以下程序,它的做法不一样,将spam()调用放在语句块中:

def spam(divideBy):return 42 / divideBytry:
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
except ZeroDivisionError:print('Error:Invalid arrgument.')

程序运行结果如下:

21.0
3.5
Error:Invalid arrgument.

print(spam(1))从未被执行是因为,==一旦执行跳到except子句的代码,就不会回到try子句,它会继续照常向下执行。

第三章 函数——自己定义一个函数相关推荐

  1. 20 Python函数、定义一个函数、参数传递、匿名函数、return语句、变量作用域、

    20Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你 ...

  2. python怎么定义一个函数_Python定义一个函数的方法

    Python函数的定义 定义函数,也就是创建一个函数,可以理解为创建一个具有某些用途的工具.定义函数需要用 def 关键字实现,具体的语法格式如下: def 函数名(形参列表): //由零条到多条可执 ...

  3. 【C】函数指针——定义一个函数指针数组

    #include<stdio.h> void function1(int); void function2(int); void function3(int);int main(){voi ...

  4. 算法训练 - P1101 ——有一份提货单,其数据项目有:商品名(MC)、单价(DJ)、数量(SL)。定义一个结构体prut,其成员是上面的三项数据。在主函数中定义一个prut类型的结构体数组,输入每

    问题描述 有一份提货单,其数据项目有:商品名(MC).单价(DJ).数量(SL).定义一个结构体prut,其成员是上面的三项数据.在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输 ...

  5. 定义一个函数,输入三角形的三条边,求三角形面积

    你可以这样定义一个函数来求三角形面积: def triangle_area(a, b, c):# 计算半周长s = (a + b + c) / 2# 计算海伦公式area = (s*(s-a)*(s- ...

  6. 可以在一个函数中定义另一个函数_第5周 定义一个函数

    亲爱的观众老爷们,早上好! 编程大师Martin Fowler先生曾经说过:"代码有很多种坏味道,重复是最坏的一种!",要写出高质量的代码首先要解决的就是重复代码的问题. 那么有什 ...

  7. 第三章 Python基础——文件操作函数

    3.1三元运算 三元运算又称三目运算,是对简单条件的简写 if 条件成立:val=1 else:val=2 改成三元运算: val=1 if条件成立 else 2 3.2字符编码转换 编码的种类情况: ...

  8. C++如何定义一个函数指针

    首先给出一个函数 int function(int a) {return a; } 一.定义一个函数指针 int (*fun)(int a); // 赋值 fun = function; // 使用 ...

  9. python使用del保留字定义一个函数-Python使用什么保留字定义一个函数。

    [单选题]Where was the First Continental Congress held? [单选题]对于集合S和T,下列不属于集合类型的操作是() [判断题]UPS系统的静态开关用于保护 ...

最新文章

  1. boost::math::chebyshev_transform用法的测试程序
  2. mysql 各表charset不同_MySQL表字段字符集不同导致的索引失效问题
  3. TikZ绘图示例——尺规作图: 圆内接任意正边形的近似画法(以正七边形为例)
  4. Python数据结构与算法(3.5)——双端队列
  5. 服务器在无盘网吧的现在与将来(1)
  6. 现场看女排vs日本了
  7. Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)...
  8. 开心游戏网页(附效果图)
  9. Matlab绘制直方图,横坐标间设置等间距的空格
  10. scrapy1.5文档(第二节 Scrapy Tutorial)
  11. 电脑快捷键大全 Ctrl
  12. codeforces #630 F. Selection of Personnel
  13. css实现遮罩层动画
  14. 【历史上的今天】3 月 4 日:美团网正式上线;Dropbox 的创始人出生;PS2 游戏机问世
  15. Elasticsearch7.17 二:mapping映射和高级语法查询DSL
  16. 『深度应用』NLP机器翻译深度学习实战课程·零(基础概念)
  17. BERT的优秀变体:ALBERT论文图解介绍
  18. 用windows 画图 裁剪照片
  19. Minecraft空岛服开服
  20. 大数据运维实战第十七课 日志收集、分析过滤工具 Logstash应用实战

热门文章

  1. Linux - 易错知识点整理(待更新)
  2. Python数据(个人所需)
  3. Linux——》Out of memory:kill process
  4. 工具技巧:Git 常用命令
  5. 实用github使用技巧
  6. 玩转Bootstrap(基础) (4.网格系统实现原理)
  7. 右键快捷菜单添加WinRAR
  8. python爬取学校教务管理系统_python requests模拟登陆正方教务管理系统,并爬取成绩...
  9. 有关csdn上面的技术方面的博客收藏
  10. react 中使用Swiper轮播图插件