【零基础学Python】def语句,参数和None值

390 阅读5分钟
像之前的print()、input()和len()功能,Python提供了一些类似的内置函数,另外也可以自己编写自定义函数。
示例:

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

第一行是def语句,它定义了一个名为hello()的函数。def语句之后的代码块是函数的主体。该代码是在调用函数时执行,而不是在首次定义函数时执行。
最后的hello()功能是函数调用。在代码中,函数调用只是函数的名称,后跟括号,括号里面可能带有一些参数。当程序运行到这些调用时,它将跳到函数的第一行并在那里开始执行代码。当运行到函数末尾时,程序运行将返回到调用函数的那一行,并像之前一样继续遍历运行代码。
当运行该段程序时,输出如下:

Howdy!
Howdy!!!
Hello there.

带有参数的DEF语句

调用print()或len()函数时,可以通过在括号之间键入值来传递在此上下文中称为参数的值。还可以定义自己的接收参数的函数。
示例:

def hello(name):
    print('Hello ' + name)
hello('Alice')
hello('Bob')
当运行该程序时,输出如下:

Hello Alice
Hello Bob

该hello()程序中函数的定义具有一个称为parameter的参数name。参数时一个变量,它被存储在一个函数里被调用。第一次调用hello()函数时,带有参数’Alice'。程序运行进入函数,变量name自动设置为'Alice',然后通过print()输出。
关于参数需要特别注意一点,函数返回时会忘记存储在参数中的值。举个例子,如果在hello('Bob')之后加print(name),程序将会报错,因为name没有被命名,而这个定义已经在hello('Bob')被调用返回后被回收了。

返回值和返回语句

当调用len()函数并将参数传递给'Hello',函数调用的结果为整数值5,即传递的字符串的长度。通常,函数调用求值的值称为函数的返回值。
使用def语句创建函数时,可以使用语句指定返回值return。一个return语句由以下部分组成:
  • return关键字
  • 函数应返回的值或表达式
当表达式与return语句一起使用时,返回值就是该表达式的计算结果。例如,以下程序定义了一个函数,该函数根据作为参数传递的数字返回一个不同的字符串。

import randomdef 
getAnswer(answerNumber):      
    if answerNumber == 1:           
        return 'It is certain'       
    elif answerNumber == 2:          
        return 'It is decidedly so'       
    elif answerNumber == 3:           
        return 'Yes'       
    elif answerNumber == 4:           
        return 'Reply hazy try again'       
    elif answerNumber == 5:           
        return 'Ask again later'       
    elif answerNumber == 6:           
        return 'Concentrate and ask again'       
    elif answerNumber == 7:           
        return 'My reply is no'       
    elif answerNumber == 8:           
        return 'Outlook not so good'       
    elif answerNumber == 9:           
        return 'Very doubtful'
r = random.randint(1, 9)
fortune = getAnswer(r)
print(fortune)

该程序启动时,Python首先导入random模块。然后getAnswer()定义函数,由于函数是已经定义的,因此执行将跳过其中的代码。接下来,random.randint(1, 9)函数调用有两个参数,1和9。它的计算结果是1和9之间(包括1和9本身)的随机整数,并且此值存储在变量r中。
将该r作为参数的getAnswer()函数调用,程序运行值getAnswer()函数的头部,该值r存储在参数answerNumber。然后,根据answerNumber判断返回对应的字符串值。程序运行返回到程序最底部fortune = getAnswer(r),返回的字符串被赋值给了变量fortune,然后传递给print()调用,输出。

请注意,由于可以将返回值作为参数传递给另一个函数调用,因此可以缩短以下三行:

r = random.randint(19)
fortune = getAnswer(r)
print(fortune)
等效于

print(getAnswer(random.randint(19)))

None值

在python中,有一个名为None的值,表示没有值。None是NoneType数据类型的唯一值。(其他编程语言则为null,nil或underfined)就像True和False,None的首字母必须大写
当需要将不会与真实值混淆的内容存储在变量中时,None会很有用。
比如:

>>> spam = print('Hello!')
Hello!
>>> None == spam
True
在Python中,在没有return声明的情况下将return None添加到任何函数定义的末尾。这类似于while 或 for循环以continue语句隐式结束的方式。另外,如果使用return不带值的情况,也会返回None。

关键字参数和PRINT()

大多数参数由他们在函数调用中的位置标识。例如,random.randint(1, 10)与random.randint(10, 1)不同。函数调用random.randint(1, 10)将返回1和10之间的随机整数,因为第一个参数是范围的低端,第二个参数是高端(而random.randint(10, 1)会导致错误)
然而,关键字参数在函数调用中会被他们之前的关键字标识。关键字参数也通常用于可选参数。
例如:

print'Hello',end =''print'World’)
输出:

HelloWorld
输出被打印在一行上,因为在之后不再打印新行’Hello',而是打印空白字符串,如果需要禁用每个print()函数调用末尾的换行符,这将很有用。
同样,可以将多个字符串值传递给print(),该函数将自动用空格分隔他们。

>>> print('cats', 'dogs', 'mice')
cats dogs mice
当然,也可以通过传递关键字参数sep来替换默认的分隔字符串。如:

>>> print('cats', 'dogs', 'mice', sep=',')
cats,dogs,mice
当然你也可以在自定义函数中添加关键字参数。后面的文章将会涉及。 

参考文档:automatetheboringstuff.com/