def printme(strbuf):
print "打印到屏幕",strbuf
return
strbuf1="haha"
printme(strbuf1)
#mutable unmutable 不可变有 数字 字符串 tuple
def changelist(list):
list[1]="hah"
return
list = ["che","jian"] #mutable 相当于c里的引用,有 list dict
changelist(list)
print list
#必备参数 参数数量与声明时一致
#关键字 参数
def defa(str1,var2):
print str1,var2
defa(str1="haha",var2=1)
defa(var2=1,str1="haha")
#缺省参数 指定默认参数值
#不定长参数
def defb(*tuple):
for str1 in tuple:
print str1
return ;
defb(1,2,33,44)
#函数内若想使用全局变量,使用global声明
total = 0; # 这是一个全局变量
# 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
# 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问
#若函数内外都有该变量的赋值,若函数内部 该变量没global声明为全局变量 则作用域为该函数,否则该函数为全局变量
def sum(arg1, arg2):
# 返回2个参数的和."
total = arg1 + arg2; # total在这里是局部变量.
print "函数内是局部变量 : ", total
return total;
# 调用sum函数
sum(10, 20);
print "函数外是全局变量 : ", total
globvar = 0
def set_globvar_to_one():
global globvar # 使用 global 声明全局变量
globvar = 1
def print_globvar():
print(globvar) # 没有使用 global
set_globvar_to_one()
print globvar # 输出 1
print_globvar() # 输出 1,函数内的 globvar 已经是全局变量
var11=11
def print_var11():
var11 = 12
print(var11)
return ;
print_var11()
print var11
#函数内若访问一个未声明的局部变量,结果就是会出现一个 UnboundLocalError 的错误
Money = 2000
def AddMoney():
global Money
Money = Money + 1
print Money
AddMoney()
print Money
# 匿名函数lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
# lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
# 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率
list = lambda list1,list2 : list1+list2
list1 = ["haha"]
list2 = ["gege"]
print list(list1,list2) #['haha', 'gege']
#文件I/O raw_input() input()
#str1 = input("请输入:"); #[x*5 for x in range(2,10,2)] [ 2, 4, 6, 8]
#print "你输入的内容是: ", str1
#模块引用
#import math只添加math到当前命名空间,模块的引用
#from math import * 会把math模块所有名字导入当前命名空间
import math
print math.pi
# from math import *
# print pi
#reload()重新载入 要直接放模块的名字,而不是一个字符串形式
# reload()函数将以前导入过的模块再加载一次。重新加载(reload)包括最初导入模块时应用的分析过程和初始化过程。这样就允许在不退出解释器的情况下重新加载已更改的Python模块。
#
# 若干注意事项:
# 1. 如果模块在语法上是正确的,但在初始化过程中失败,则导入过程不能正确地将模块的名字绑定到符号表中。这时,必须在模块能被重新加载之前使用import()函数加载该模块。
# 2. 重新加载的模块不删除最初旧版本模块在符号表中的登记项。
# 3. 如果一模块利用from。。。import。。。方式从另一模块导入对象,reload()函数不重新定义导入的对象,可利用import。。。形式避免这个问题。
# 4. 提供类的重新加载模块不影响所提供类的任何已存实例---已存实例将继续使用原来的方法定义,只有该类的新实例使用新格式。这个原则对派生类同样适用。
#异常处理
try:
fo = open("t.txt","wb")
# i=7/0
fo.write("hahah")
fo.close()
# except Exception:
# print "程序异常"
except ZeroDivisionError:
print "0异常"
except IOError:
print "IO异常"
else:
print "程序执行完毕"
try:
print "hah"
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "xixi"
finally:
print "关闭文件"
#自定义异常 异常应该是典型的继承自Exception类
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args #为什么输出是元组
python基础2 (函数,模块,文件I/O,异常处理)
最新推荐文章于 2022-07-29 11:19:23 发布