一、Python函数、模块的概念
Python函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
函数调用
定义一个函数只给了函数一个名称,需要指定函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
实例:
# 定义函数
def printme( str ):
"打印任何传入的字符串"
print (str);
return;
# 调用函数
printme("我要调用用户自定义函数!");
printme("再次调用同一函数");
可更改(mutable)与不可更改(immutable)对象
在 python 中,string, tuple, 和 number 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:类似 C++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(a),则是将 a 真正的传过去,修改后fun外部的a也会受影响
传不可变对象实例:
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print b # 结果是 2
传可变对象实例
# 可写函数说明
def changeme( mylist ):
"修改传入的列表"
mylist.append([1,2,3,4]);
print "函数内取值: ", mylist
return
# 调用changeme函数
mylist = [10,20,30];
changeme( mylist );
print "函数外取值: ", mylist
return 语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回 None。
实例:
# 可写函数说明
def sum( arg1, arg2 ): # 返回2个参数的和."
total = arg1 + arg2
print ("函数内 : ", total )
return total;
# 调用sum函数
total = sum( 10, 20 );
变量作用域
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:
- 全局变量
- 局部变量
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
实例:
total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ): #返回2个参数的和."
total = arg1 + arg2; # total在这里是局部变量.
print ("函数内是局部变量 : ", total )
return total;
#调用sum函数
sum( 10, 20 );
print ("函数外是全局变量 : ", total)
Python模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
实例:
support.py 模块:
def print_func( par ):
print ("Hello : ", par )
return
import 语句
import module1[, module2[,... moduleN]
比如要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数时,必须这样引用:
模块名.函数名
# 导入模块
import support
# 现在可以调用模块里包含的函数了
support.print_func(“hello world")
from…import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
from modname import name1[, name2[, ... nameN]]
实例:
from fib import fibonacci
PYTHONPATH 变量
作为环境变量,PYTHONPATH 由装在一个列表里的许多目录组成。PYTHONPATH 的语法和 shell 变量 PATH 的一样。
在 Windows 系统,典型的 PYTHONPATH 如下:
set PYTHONPATH = C:\python35\lib;
在 UNIX 系统,典型的 PYTHONPATH 如下:
set PYTHONPATH=/usr/local/lib/python
Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 init.py 文件, 该文件的内容可以为空。init.py用于标识当前文件夹是一个包。
二、Python文件IO的概念及使用;
打印到屏幕
print ("Python 是一个非常棒的语言,不是吗?“)
屏幕上会产生以下结果:
Python 是一个非常棒的语言,不是吗?
input函数
input 可以接收一个Python表达式作为输入,并将结果返回(不做运算)
str = input("请输入:")
print ("你输入的内容是: ", str)
显示:
请输入:1 + 2
你输入的内容是: 1 + 2
2、raw_input函数
打开和关闭文件
Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。
open 函数
你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
语法:
file object = open(file_name [, access_mode][, buffering])
图示:
File对象的属性
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
实例:
# 打开一个文件
fo = open("foo.txt", "w")
print ("文件名: ", fo.name )
print ("是否已关闭 : ", fo.closed )
print ("访问模式 : ", fo.mode )
print ("末尾是否强制加空格 : ", fo.softspace)
close()方法
File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
实例:
# 打开一个文件
fo = open("foo.txt", "w")
print ("文件名: ", fo.name )
# 关闭打开的文件
fo.close()
Write()方法
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
# 打开一个文件
fo = open(“test.txt", "w")
fo.write( “welcome to beijing!\n")
# 关闭打开的文件
fo.close()
Read()方法
read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print ("读取的字符串是 : ", str )
# 关闭打开的文件
fo.close()
remove()方法
你可以用remove方法删除文件,需要提供要删除的文件名作为参数。
import os
# 删除一个已经存在的文件test2.txt
os.remove("test2.txt")
mkdir()方法:创建新的目录 , 列如:os.mkdir(“/test")
chdir()方法:改变当前的目录,列如:os.chdir("/home/newdir")
rmdir()方法:删除目录,列如:os.rmdir( “/tmp/test” )
三、在程序中进行异常处理并自定义异常;
什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
异常是Python对象,表示一个错误。
异常处理
try:
<语句> #运行别的代码
except <名字>:
<语句>
#如果在try部份引发了'name'异常
except <名字>,<数据>:
<语句>
#如果引发了'name'异常,获得附加的数据
else:
<语句> #如果没有异常发生