python

#coding=utf-8
# maketextfile.py -->create text.file
import os
ls = os.linesep
'''
如果一个函数中需要频繁使用一个属性,建议为该属性设置一个本地变量别名
提高查询速度。
os.linesep:查询系统换行符
'''
fname = raw_input("please input a name :")
while True:
    if os.path.exists(fname):
        print 'Error:"%s" already exist' %fname
    all = []
    print  "\nEnter lines ('.' by itself to quit).\n"
# loop until user terminates input
    while True:
            entry = raw_input(">")
            if entry == '.':
                break
            else:
                all.append(entry)
    fobj = open(fname ,"w")
    fobj.writelines(['%s%s' %(x,ls) for x in all] )
    fobj.close()
    print  "DONE"
    break
'''
         %s%s 为每一行添加行结束符
        (x,ls)表示每一行及其行结束符
'''
# 打开文件
fname = raw_input("enter filename:")
print (fname)
try:
    fobj=open(fname,'r')
except IOError,e:
    print "file open error :",e
else:
    for eachLine in fobj:
        print eachLine
    fobj.close()
'''
try-except-else语句:
try字句是一段我们希望检测错误的代码
'''
'''
每个对象天生是一个计数器,记录自己的引用次数,这个数目表示
有多少个变量指向该对象。
Python提供了is 和is not 运算符来测试两个变量是否指向同一个
对象。
'''
'''
Python中常用的内建函数
type()返回任意Python对象的类型,而不局限于标准类型
isinstance()确认一个对象的类型
'''

'''
dir函数:
内置dir函数会抓取对象内可用的属性列表的简单方法。他能够调
用任何有属性的对象
'''
import  sys
# print (dir(sys))
# print (dir([]))
'''
Module documentation
Words Go here
注释会保存在__doc__属性中供查看(文件被导入之后)
'''
# print sys.__doc__
lss="abcdef"
ascii=[]
summ=0
asc = 'a '
# print (type(x))
print len(lss)
for x in range(len(lss)):
    ascii.append(lss[x])
    asc = lss[x]
    summ+=ord(asc)
print summ

print map(ord,lss)
dicc = {"a":1,"b":2}
print  dicc
# print  dicc.keys()
print (dicc.keys().sort())
'''
filter:
filter(...)
    filter(function or None, sequence) -> list, tuple, or string

    Return those items of sequence for which function(item) is true.  If
    function is None, return the items that are true.  If sequence is a tuple
    or string, return the same type, else return a list.
'''
'''
列表解析:
[expression for target1 in sequence1 [if condition]
             for target2 in sequence2 [if condition]]
             [x+y for x in [0,2,4] for y in [2,4,3]]
'''

'''
迭代器:迭代器在执行后生成值,将自动挂起并暂停他们的执行和
状态,正是因为这一点,无论是从头计算整个列的值或者是保存和
恢复类的状态时,他们都是一种实用的替代解决方案。
生成器和代码最大的不同时
'''
'''
模块的搜索路径:
    程序的主目录
    PYTHONPATH目录(需要设定)
    标准链接库目录
    任何.pth文件
    通过sys.path来输出模块搜索目录
    主目录:包含程序的顶级文件目录,或交互模式所在的目录
    PYTHONPATH目录:如果要跨目录搜索,需要设置
    标准链接库:系统会自动搜索标准库模块安装在机器上的目录,不需要设置
    .pth文件目录:python允许用户把有效的目录添加到模块搜索路径中去,也就是在后缀名为.pth的文本文件中一行一行地列出目录。
'''
'''
模块文件的选择:
模块文件后缀.py是刻意从import 语句中省略的,python会选择在搜索路径中第一个符合导入文件名的文件,这些文件包括:b.py,b.pyc,目录b,编译扩展模块(通常c或c++编写),c编写好的内置模块,zip文件组件,导入时会自动解压缩,内存内映像,java类(Jython),.NET. 如果同时有同名的文件,python会按照搜索顺序来选择。
'''
'''
对于第三方扩展,一般使用distutils工具来自动安装。
'''
'''
模块的使用:客户端可用使用import 或from 语句,其中的差别是,import 会读取到整个模块,必须定义后才能读取其变量名,from将获取模块特定的变量名。
from module1 import distrabute.

像def一样,import 和from 都是可执行语句,而不是编译期间的声明,而且他们可以嵌套在If测试中,也可以出现在def之中。
此外,像def一样,import 和from都是隐性的赋值语句,import 将整个模块对象赋值给一个变量名
from将一个或多个变量名赋值给另一个模块中同名的对象。
'''

'''
模块命名空间:
    模块可以理解为变量名的封装,也就是定义想让系统其他部分看见的变量名场所。从技术上来讲,模块通常相应于文件,二python建立模块对象,以包含模块文件内所赋值的所有变量名。
    模块就是命名空间(变量名建立所在的场所),而存在于模块之内的变量名就是模块对象的属性。
    '''
    '''
    模块的加载和作用域:
    1、模块在首次导入时执行。系统中,无论模块第一次导入在什么地方,Python都会建立空的模块对象,并逐一执行该模块文件内的语句,依照文件从头到尾的执行。
    2、顶层的赋值语句会创建模块属性。在导入时,文件顶层,不在class 和 def内,赋值变量的语句,会建立对象的属性,赋值的变量名会储存在模块的命名空间内。 
    3、模块的命名空间可以通过属性dir ()  和__dict__获取,。
    4、模块是一个独立的作用域,模块顶层变量名遵守和函数内变量名相同的引用和赋值规则。

    内部模块空间是作为词典对象存储的,通过__dict__来获得模块的命名空间字典的key 。module.__dict__.keys()来获得命名空间。或者使用dir().
    属性名的点号运算:
    点号运算: x.y是指在当前范围内搜索x,然后搜索对象x之中的属性y。
    多层点号运算:x.y.z是指寻找对象x 之中的变量y,然后再找对象x.y中的z.   
    '''
    函数绝对无法看到其他函数的变量名,除非它在物理上处于这函数
    模块无法看到其他模块内的变量名,除非明确地进行了导入
    虽然模块的导入不会发生向上的嵌套,但是确实会发生向下的嵌套,利用点号的属性运算路径,可用深入写到任意嵌套的模块中并读取其属性。
    例如模块3中定义了一个全局变量:
    x =3
    接着模块2定义文本文件内的x,然后导入mod3.
    x=2 
    import mod3
    print x                         x=2
    print mod3.x            x=3

    mod1.py
    x=1
    import mod2
    print x
    print mod2.x
    print mod2.mod3.x
    再导入模块时,就会执行模块内的内容。
    '''
    模块的重载:reload
    在你编辑一个文本python文件,然后通过导入模块来调用该Python文件,该文件会得到一个执行结果,而如果此时再编辑该python文件,进行重载,那么,该模块会重载修改过的文件。
    '''
    '''
    包:Python代码的目录就称为包,因此这类导入就称为包导入。
    包的优点:对于组织大型系统内的文件会很方便,而且可用简化模块搜索路径的设置。
    导入包:
        import dir1.dir2.mod
        from dir1.dir2.mod import x。
        这就意味着,dir1,dir2都在一个目录容器中,这个目录可用在Python模块搜索中找到,即定义在:程序的主路径下,或者定义在PYTHONPATH,或.pth文件内。

        __init__.py包文件:
        如果使用包导入,那么必须多遵从一条约束:包导入的每个目录内部都必须有__init__,py,否则导入包会失败。也就是说在:dir0\dir1\dir2 中,dir1和dir2里边必须都包含__init__.py文件


        包的导入主要遵从以下规则:
        dir1和dir2中必须都含有一个__init__.py
        dir0是容器,不需要__init__.py,如果有的话,这个文件也会被忽略
        dir0必须在模块的搜索路径上。
        通常情况下,__init__.py扮演了包初始化的挂钩,替目录产生模块命名空间以及使用目录导入时实现from * 行为的脚色。
        包的初始化:
        python初始导入某个目录时,会自动执行该目录下的__init__.py。
        模块命名空间:
        再包导入的模型中,脚本内是目录路径,在导入后会变成真实的嵌套对象路径。例如导入后,dir1.dir2会运行,返回一个模块对象,而此对象的命名空间包含了dir2的__init__.py文件所赋值的所有变量。
        from * 语句的行为。

        *args 和**kwargs
        *args是参数列表
        **kwargs是字典













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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值