AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第3章:FUNCTIONS

函数(function)就是程序中的子程序,类似于黑盒子。函数将完成某一功能的代码组织到一起,目的是为了复用。
使用函数也可以方便调试错误。

带参数的DEF语句

def function_name(parameters):
	code block

函数定义中的参数称为形参(parameters),调用函数时传递的参数称为实参(arguments)
参数的传递都是By Value的。

返回值和RETURN 语句

return value | expression

以下函数定义可根据条件返回不同数据类型,虽然语法没错,但不建议:

>>> def getAnswer(answerNumber):
...     if answerNumber == 1:
...             return 'It is certain'
...     elif answerNumber == 2:
...             return 2

空值

Python中的空值用None表示,类似于其它语言中的NullNil
空值表示未赋值,缺少值。
没有返回值的函数如print()的返回值为None,实际上Python为这些函数添加了return None语句,另外,不带参数的return语句等同于return None。

KEYWORD 参数和PRINT() 函数

函数的参数通常按位置传递,但也可以用keyword参数指定,例如:
function_name(keyword=argument, keyword=argument...)
keyword参数通常用于函数的可选参数。

看一下print函数的定义:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

以下为示例:

>>> print('cats', 'dogs', 'mice')
cats dogs mice
>>> print('cats', 'dogs', 'mice', end='!\n')
cats dogs mice!
# 默认的print类似于echo,下面这句类似echo -n
>>> print('Hello', end='')
>>> print('cats', 'dogs', 'mice', sep = '|')
cats|dogs|mice

调用栈

函数调用类似于堆栈,后进先出。

本地和全局范围

函数内部的变量称为本地变量,有效范围在本地(函数内部);函数外部的变量称为全局变量,有效范围是全局(整个程序)。
出范围后,变量就变为无效(可以认为被销毁,生命周期结束)。

一些原则:

  • 全局范围的代码不能访问本地变量
  • 本地范围的代码可以访问全局变量,自身的本地变量,但不能访问其它函数的本地变量
  • 不同有效范围的变量可以重名,但应避免

GLOBAL语句

如果在函数中,变量没有赋值也没有通过参数传递而直接使用,那么此变量为全局变量。
如果想在函数中修改全局变量,必须使用global语句,例如:

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

异常处理

这里的异常指exception,可以用try...except处理。例如:

try:
	code block for operation
except EXCEPTION:
	code block for handle exception

小程序: ZIGZAG

代码zigzag.py如下:

import time, sys
indent = 0 # How many spaces to indent.
indentIncreasing = True # Whether the indentation is increasing or not.

try:
    while True: # The main program loop.
        print(' ' * indent, end='')
        print('********')
        time.sleep(0.1) # Pause for 1/10 of a second.

        if indentIncreasing:
            # Increase the number of spaces:
            indent = indent + 1
            if indent == 20:
                # Change direction:
                indentIncreasing = False
        else:
            # Decrease the number of spaces:
            indent = indent - 1
            if indent == 0:
                # Change direction:
                indentIncreasing = True
except KeyboardInterrupt:
    sys.exit()

唯一需要解释的是KeyboardInterrupt异常表示按键Ctrl+C

单词

meandering - 蜿蜒曲折,迂回
upshot - 最后结果,结局

发布了370 篇原创文章 · 获赞 43 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/stevensxiao/article/details/104089485