天天看点

《Python编程快速上手——让繁琐工作自动化》第三章第3章 函数

第3章 函数

def hello():
      print('Howdy!')
     print('Howdy!!!')
     print('Hello there.')

 hello()
           

3.1 def语句和参数

如果调用print()或len()函数,你会传入一些值,放在括号之间,在这里称为“参数”。也可以自己定义接收参数的函数。

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

hello('Alice')
 hello('Bob')
           

3.2 返回值和return语句

用def语句创建函数时,可以用return语句指定应该返回什么值。

3.3 None值

None是NoneType数据类型的唯一值(其他编程语言可能称这个值为null、nil或undefined)。就像布尔值True和False一样,None必须大写首字母N。

在幕后,对于所有没有return语句的函数定义,Python都会在末尾加上return None。这类似于while或for循环隐式地以continue语句结尾。而且,如果使用不带值的return语句(也就是只有return关键字本身),那么就返回None。

3.4 关键字参数和print()

print('Hello')
print('World')

Hello
World

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

HelloWorld

>>> print('cats', 'dogs', 'mice')
cats dogs mice

>>> print('cats', 'dogs', 'mice', sep=',')
cats,dogs,mice
           

3.5 局部和全局作用域

作用域很重要,理由如下:

  • 全局作用域中的代码不能使用任何局部变量;
  • 但是,局部作用域可以访问全局变量;
  • 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。
  • 如果在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名为spam的局部变量,和一个名为spam的全局变量。

3.6 global语句

如果需要在一个函数内修改全局变量,就使用global语句。如果在函数的顶部有global eggs这样的代码,它就告诉Python,“在这个函数中,eggs指的是全局变量,所以不要用这个名字创建一个局部变量。

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

 eggs = 'global'
 spam()
 print(eggs)
           

有4条法则,来区分一个变量是处于局部作用域还是全局作用域:

1.如果变量在全局作用域中使用(即在所有函数之外),它就总是全局变量。

2.如果在一个函数中,有针对该变量的global语句,它就是全局变量。

3.否则,如果该变量用于函数中的赋值语句,它就是局部变量。

4.但是,如果该变量没有用在赋值语句中,它就是全局变量。

在一个函数中,一个变量要么总是全局变量,要么总是局部变量。

3.7 异常处理

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

3.8 一个小程序:猜数字