python基础2 (函数,模块,文件I/O,异常处理)

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  #为什么输出是元组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值