Python学习笔记(三):Time、函数、模块、文件I/O、异常处理(快速入门篇)

以下是入门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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值