python学习日记8

今天开始学习函数、参数、作用域等编写大型程序的入门。

抽象

无论使用何种语言,代码的简洁性和可读性都是必不可少的。好的代码简洁明了,而不是又臭又长。所以,抽象是一种美德。
同时我们要尽可能对程序进行模块化处理,即方便重复调用,又方便管理和阅读,尤其是在面向对象的编程中。
另外,函数、变量的命名要简洁明了,建议以英文命名,最好不要出现中文拼音。常用的有小驼峰(inputMyName)、大驼峰(InputMyName)或使用下划线(input_my_name)。大型项目往往由多人共同开发,应该让其他人看见命名就知道此函数的功能是什么。

自定义函数

函数进行特定操作并可以返回一个值。要判断某个对象是否可调用,我们可以使用callable。

import math
x=1
y=math.sqrt
print(callable(x))
print(callable(y))

py的函数使用def定义,与C高度相似。
除了使用井号做注释以外,我们也可以给函数写文档,并使用doc调用:

def hello():
    "Hello,it is a documentation"
    print("Hello world")
print(hello.__doc__)

也可以使用函数help来获取函数的详细信息:

def hello():
    "Hello,it is a documentation"
    print("Hello world")
    return 1
print(help(hello))

参数的传递和C大同小异,不过还是要说一说。如果传入的是一个字符串、数或元组(这些都是不可变的),在函数内部替换不会影响到外部。但如果传入一个列表,则可以被修改。如果不像要列表被修改,则需要创建一个副本。
py在调用函数的时候,可以指定参数,例如hello(hello=”1″,world=”2″),而无需指定参数顺序。我们也可以为参数设定默认值,使函数在不传入参数的情况下使用默认值。

def hello(a="!"):
    print("Hello world {}".format(a))
hello()
hello(3)

我们也可以提供任意数量的参数:

def print_name(*names)
    print(names)

与复制时相同,星号可以放在任意位置,但星号不会收集参数,如果想要收集参数,可以使用两个星号,这样得到一个字典:

def print_name(**names)
    print(name)

星号运算符也可以用于传入,只不过用于传入功能相反,是分配参数。

作用域

变量在py内部有一个“看不点的字典”,我们可以用vars函数返回:

x=1
s=vars()
print(s["x"])

不应修改返回的字典,根据py官方文档的说法,修改会造成不确定的结果。
局部变量如果和全局变量重名,会遮盖全局变量。在函数内赋值默认为局部变量,不过我们可以把它转化成全局变量:

x=1
def plusx():
    global x
    x=x+1
print(plusx())

函数的嵌套和递归与C大同小异,此处不再赘述。

知识共享许可协议
Text is available under CC BY-NC-SA 4.0 unless otherwise stated.

除非特殊声明,本站所有内容均以 CC BY-NC-SA 4.0协议授权。
上一篇
下一篇