首页 > 代码库 > python基础-3

python基础-3

<style></style>

python函数:

def functionname( parameters ):   "函数_文档字符串"   function_suite   return [expression]

所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。

不定长参数:

def functionname([formal_args,] *var_args_tuple ):   "函数_文档字符串"   function_suite   return [expression]

加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。

 

<style></style>

 

匿名函数:

 

lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

 

  • Lambda函数能接收任何数量的参数但只能返回一个表达式的值,同时不能包含命令或多个表达式。

  • 匿名函数不能直接调用print,因为lambda需要一个表达式。

  • lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。

 

#可写函数说明sum = lambda arg1, arg2: arg1 + arg2; #调用sum函数print "Value of total : ", sum( 10, 20 )print "Value of total : ", sum( 20, 20 )

 

 

<style></style>

 

python模块:

 

一个Python表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。

 

Python会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。

 

因此,如果要给全局变量在一个函数里赋值,必须使用global语句

 

Money = 2000def AddMoney():   # 想改正代码就取消以下注释,不然会出错,因为没有在访问前声明一个局部变量   # global Money   Money = Money + 1 print MoneyAddMoney()print Money

 

如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。

 

如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。

 

两个函数的返回类型都是字典。所以名字们能用keys()函数摘取。

 

 

<style></style>

 

range函数用法:

 

>>> range(1,5) #代表从15(不包含5)

 

[1, 2, 3, 4]

 

>>> range(1,5,2) #代表从15,间隔2(不包含5)

 

[1, 3]

 

>>> range(5) #代表从05(不包含5)

 

[0, 1, 2, 3, 4]

 

 

<style></style>

 

raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符):

 

str = raw_input("Enter your input: ");print "Received input is : ", str

 

input([prompt]) 函数和raw_input([prompt]) 函数基本可以互换,但是input会假设你的输入是一个有效的Python表达式,并返回运算结果。

 

<style></style>

文件操作:

r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

open函数:

file object = open(file_name [, access_mode][, buffering])

buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

File对象的属性:

file.closed

返回true如果文件已被关闭,否则返回false

file.mode

返回被打开文件的访问模式。

file.name

返回文件的名称。

file.softspace

如果用print输出后,必须跟一个空格符,则返回false。否则返回true

 

<style></style>

close方法:

File对象的close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。

write方法:

fileObject.write(string);

read方法:

语法:

fileObject.read([count]);
<style></style>

在这里,被传递的参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。

Tell()方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后:

seekoffset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

# 把指针再次重新定位到文件开头position = fo.seek(0, 0);
<style></style>

Pythonos模块提供了帮你执行文件处理操作的方法,比如重命名和删除文件。

要使用这个模块,你必须先导入它,然后可以调用相关的各种功能。

rename()方法:

rename()方法需要两个参数,当前的文件名和新文件名。

语法:

os.rename(current_file_name, new_file_name)remove方法:

你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。

语法: os.remove(file_name)

mkdir方法:

可以使用os模块的mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。

语法:

os.mkdir("newdir")
<style></style>

chdir方法:

可以用chdir()方法来改变当前的目录。chdir()方法需要的一个参数是你想设成当前目录的目录名称。

语法:

os.chdir("newdir")

getcwd方法:

getcwd()方法显示当前的工作目录。

语法:

os.getcwd()
<style></style><style></style>

rmdir()方法:

删除目录,目录名称以参数传递。

在删除这个目录之前,它的所有内容应该先被清除。

语法:

os.rmdir(‘dirname‘)
<style></style>

异常处理:

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

如果你不想在异常发生时结束你的程序,只需在try里捕获它。

语法:

以下为简单的try....except...else的语法:

try:<语句>        #运行别的代码except <名字>:<语句>        #如果在try部份引发了‘name‘异常except <名字>,<数据>:<语句>        #如果引发了‘name‘异常,获得附加的数据else:<语句>        #如果没有异常发生
<style></style>

try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

  • 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。

  • 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。

  • 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。

<style></style>

使用except而不带任何异常类型:

try:   You do your operations here;   ......................except:   If there is any exception, then execute this block.   ......................else:   If there is no exception then execute this block. 

以上方式try-except语句捕获所有发生的异常。但这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息。因为它捕获所有的异常

<style></style>

也可以使用一个except语句来处理多个异常信息

try:   You do your operations here;   ......................except(Exception1[, Exception2[,...ExceptionN]]]):   If there is any exception from the given exception list,    then execute this block.   ......................else:   If there is no exception then execute this block.  
<style></style>

try-finally 语句无论是否发生异常都将执行最后的代码。

try:<语句>finally:<语句>    #退出try时总会执行

注意:你可以使用except语句或者finally语句,但是两者不能同时使用。else语句也不能与finally语句同时使用

一个异常可以带上参数,可作为输出的异常信息参数。

你可以通过except语句来捕获异常的参数,如下所示:

def temp_convert(var):   try:      return int(var)   except ValueError, Argument:      print "The argument does not contain numbers\n", Argument# Call above function here.temp_convert("xyz");

以上程序执行结果如下:

The argument does not contain numbersinvalid literal for int() with base 10: ‘xyz‘

注意:上述Argument可以是任意名称

 



 

python基础-3