以下是入门python看自强学堂的笔记,网址为http://www.ziqiangxuetang.com/python/python-tutorial.html
同时,补充阅读有http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000
Head First Python、Python基础教程
日期和时间(import time、calendar)
不想讲过多,需要函数直接链接
http://www.ziqiangxuetang.com/python/python-date-time.html
函数
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
按引用传递参数
所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
参数
以下是调用函数时可使用的正式参数类型:
- 必备参数——须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
命名参数——调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。
def printme( string ): "打印任何传入的字符串" print string printme( str = "My string")
- 缺省参数——缺省参数的值如果没有传入,则被认为是默认值
不定长参数——处理比当初声明时更多的参数,声明时不会命名
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression] 如: def printinfo( arg1, *vartuple ): "打印任何传入的参数" print "输出: " print arg1 for var in vartuple: print var
匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时只能不能包含命令或多个表达式。
匿名函数不能直接调用print,因为lambda需要一个表达式。
lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda [arg1 [,arg2,.....argn]]:expression #只包含一个语句
如:
sum = lambda arg1, arg2: arg1 + arg2
print "Value of total : ", sum( 10, 20 )
模块
简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。
import module1[, module2[,... moduleN]
from modname import name1[, name2[, ... nameN]]
from mod_name import *
定位模块
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录
- 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
命名空间和作用域
变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称(键)和它们各自相应的对象(值)的字典。
一个Python表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。
每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。
Python会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。
因此,如果要给全局变量在一个函数里赋值,必须使用global语句。
global VarName的表达式会告诉Python, VarName是一个全局变量,这样Python就不会在局部命名空间里寻找这个变量了。
Money = 2000
def AddMoney():
global Money
Money = Money + 1
dir()函数
dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数。
globals()和locals()函数
根据调用地方的不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字。
如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。
如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。
两个函数的返回类型都是字典。所以名字们能用keys()函数摘取。
reload()函数
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。
若想重新执行模块里顶层部分的代码,可以用reload()函数。该函数会重新导入之前导入过的模块。
文件I/O
打印到屏幕(print)
print语句,你可以给它传递零个或多个用逗号隔开的表达式。此函数把你传递的表达式转换成一个字符串表达式,并将结果写到标准输出
print "Python is really a great language,", "isn't it?";
读取键盘输入(raw_input、input)
Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘。如下:
- raw_input——raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)
- input——input([prompt]) 函数会假设你的输入是一个有效的Python表达式,并返回运算结果。
文件
open函数
object = open(file_name [, access_mode][, buffering])
参数:
file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。默认文件访问模式为只读(r)。
buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。
如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。
如果取负值,寄存区的缓冲大小则为系统默认。
File对象的属性
file.closed 返回true如果文件已被关闭,否则返回false。
file.mode 返回被打开文件的访问模式。
file.name 返回文件的名称。
file.softspace 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。
Write()方法
Write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
Write()方法不在字符串的结尾不添加换行符(‘\n’):
fileObject.write(string);
read()方法
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
fileObject.read([count]);
count是要从已打开文件中读取的字节计数。从文件的开头开始读入,若未传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
文件位置(tell、seek)
Tell()方法告诉你文件内的当前位置;
seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
重命名和删除文件(rename、remove)
import os
os.rename(current_file_name, new_file_name)
os.remove(file_name)
目录
import os
os.mkdir("newdir") 在当前目录下创建新的目录们。需要提供一个包含了要创建的目录名称的参数。
os.chdir("newdir") 改变当前的目录。需要的一个参数是你想设成当前目录的目录名称。
os.getcwd() 显示当前的工作目录
os.rmdir('dirname') 删除目录,目录名称以参数传递。在删除这个目录之前,它的所有内容应该先被清除。
异常处理
标准异常
如《head first python》中所说,感觉还是很有用的。
链接:http://www.ziqiangxuetang.com/python/python-exceptions.html
异常处理(try/except)
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句> #如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生
使用except而不带任何异常类型,也可以带有多种异常类型
try-finally 语句
try-finally 语句无论是否发生异常都将执行最后的代码。
try:
<语句>
finally:
<语句> #退出try时总会执行
raise
注意:可以使用except语句或者finally语句,但是两者不能同时使用。else语句也不能与finally语句同时使用
触发异常(raise)
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
def functionName( level ):
if level < 1:
raise "Invalid level!", level
try:
Business Logic here...
except "Invalid level!":
Exception handling here...
else:
Rest of the code here...
注意:为了能够捕获异常,”except”语句必须有用相同的异常来抛出类对象或者字符串。
用户自定义异常
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg