1)函数声明:以关键字def开头,紧跟函数名称,然后是用括号括起来的参数。多个参数以逗号分割
- 格式:
def 函数名(size,a_kilobyte_is_1024_bytes=True):
语句体
- python要求至少一条语句体, pass
def test ()
pass
2)python 函数可以有返回值,但不指定返回值数据类型,如果没有return 返回明确的值,则默认返回空值 None
- 格式
def 函数名():
s="您好"
return s
- 如果有return 则返回其后的值,否则返回空值 None
- 函数只能使用一条return语句,但可以返回多个值
def compute (x,y):
s=x+y
s2=x-y
return [s,s2]
result =compute(10,20)
print(result)
print(result[0])
pirnt(result[1])
- 最好使用原组返回多个个值,因为无法修改
小括号可以省略,系统会识别为元组数据
- return (s,)# 如果元祖只有一个元素,必须加逗号,否则会报错,因为会误认为返回具体值,而不是元组
3) 可选的和命名的参数(书中例子有点繁琐,使用简单的函数举例)
- python允许函数有默认值。如果函数被调用的时候没有指定参数,那么参数将使用默认值。
b=3
def add(a,b):
print("b:"+str(a))
pritn(a+b)
add(1,b) #此时 a=1, b=3
结果:
a:1
b:3
总和:4
add(b,1) #此时 a=b , b=1
结果:
a:3
b:1
总和:4
- 通过使用命名的参数还可以按照任何顺序指定参数
add(b=b,a=1) #此时使用命名参数指定顺序
结果:
a:1
b:3
总和:4
- 命名参数是指定形参传递具体的值:
1)命名参数功能是不用考虑形参传递的顺序
add(1,c=2,b=3)
add(b=1,a=2,c=3)
2)一旦启用命名参数,则之后的参数均需使用名参数
add(1,b=2,c=3) #形参传递b=2是命名参数,它的右侧传参必须使用 c=3
a:1
b:2
c:3
总和:6
3)直接传参程序会按顺序传递,其他非命名参数则可以不按顺序指定,但非命名参数需要按原来定义参数的顺序传参
add(1,c=2,b=3)
a:1
b:3
c:2
总和:6
4)其他
- docstring三引号(''' .... ''')包含的文本多作为注释属性调取,可用 __doc__调取:
def test(a,b):
'''
测试docstring
'''
print (a+b)
test(1,2)
print(test.__doc__)
结果:
两数之和:3
测试docstring
- import 的搜索路径
1)尝试import一个模块时,python 会寻找几个地方,即sys.path里面所有的路径 (用列表存储所有路径)
>>> import sys
>>> sys.path
['C:/Programs/Python/Python36', 'C:\\Programs\\Python\\Python36\\Lib\\idlelib',
'C:\\Programs\\Python\\Python36\\python36.zip', 'C:\\Programs\\Python\\Python36\\DLLs',
'C:\\Programs\\Python\\Python36\\lib', 'C:\\Programs\\Python\\Python36',
'C:\\Programs\\Python\\Python36\\lib\\site-packages']
2)sys.path.insert(0,new_path)
sys.path.insert(0,'/home/mark/diveintopython3/examples')
3) sys内置模块使用起来和常规模块一样,但无法取得它的源代码,因为sys模块是用C语言编写的
add(1,c=2,b=3)
- 对象:在python中所有的东西都是对象
查看对象属性:
1)dir
2)__doc__
3)help
查看某个对象的详细文档用help, 如查看str类型的详细文档可以用help(str)。
如果文档的内容很多,help会列出全部文档的一部分,并在左下角提示“-- More --”,
按Enter键盘会显示更多的信息,要回到命令行交互模式可按Ctrl + C。
- 代码缩进
1)python中没有明确的开始和结束
唯一的界定符就是一个冒号(:)和代码自身缩进
3) python使用回车符分割语句
- 异常
1)异常可以被处理
2)try...except
3)捕获导入错误
try:
import chardet
except ImportError:
chardet=None
#用if 判断
if chardet:
# do something
else:
#continue anyway
try:
from lxml import etree
except ImportError:
import xml.etree.ElementTree as etree