注册 登录
编程论坛 Linux系统管理

python 例

madfrogme 发布于 2012-08-30 17:15, 6679 次点击
说明局部变量的程序
程序代码:

#!/usr/bin/python

def func(x):
    print 'x is',x
    x = 2
    print 'Changed local x to',x

x = 50
func(x)
print 'x is still',x

$ ./func_local.py
x is 50
Changed local x to 2
x is still 50

[ 本帖最后由 madfrogme 于 2012-8-30 21:10 编辑 ]
21 回复
#2
madfrogme2012-08-30 17:21
如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。
程序代码:
#!/usr/bin/python

def func():
    global x
    print 'x is',x
    x = 2
    print 'Changed local x to',x

x = 50
func()
print 'Value of x is',x

$ ./func_global.py
x is 50
Changed local x to 2
Value of x is 2

注意:python没有接受x作为参数

[ 本帖最后由 madfrogme 于 2012-8-30 21:11 编辑 ]
#3
madfrogme2012-08-30 19:17
对于一些函数,你可能希望它的一些参数是 可选 的,

如果用户不想要为这些参数提供值的话,这些参数就使用默认值。
程序代码:
#!/usr/bin/python

def say( message, times = 1):
    print message * times
say('Hello')
say('World',3)


$ ./func_default.py
Hello
WorldWorldWorld

[ 本帖最后由 madfrogme 于 2012-8-30 21:10 编辑 ]
#4
madfrogme2012-08-30 19:57
我们不必担心参数的顺序,通过命名来为这些参数赋值——这被称作 关键参数 ——我们使用名字(关键字)而不是位置

程序代码:

#!/usr/bin/python
def func(a, b=5, c=10):
    print 'a is', a, 'and b is', b, 'and c is', c

func(3, 7)
func(25, c=24)
func(c=50, a=100)


$ ./func_key.py
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50

[ 本帖最后由 madfrogme 于 2012-8-30 21:10 编辑 ]
#5
madfrogme2012-08-30 22:01
除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句。

def someFunction():
    pass

pass语句在Python中表示一个空的语句块.

[ 本帖最后由 madfrogme 于 2012-8-30 23:03 编辑 ]
#6
madfrogme2012-08-30 22:15
使用__doc__(注意双下划线)调用printMax函数的文档字符串属性

Python把 每一样东西 都作为对象,包括这个函数。

程序代码:
#!/usr/bin/python
def printMax(x, y):
    ''' Prints the maximum of two number.
    The two values must be integers.'''
    x = int(x)
    y = int(y)

    if x > y:
        print x, 'is maximum'
    else:
        print y, 'is maximum'

printMax(3,5)
print printMax.__doc__

$ ./func_doc.py
5 is maximum
 Prints the maximum of two number.
    The two values must be integers.
#7
madfrogme2012-08-30 22:17
使用__doc__(注意双下划线)调用printMax函数的文档字符串属性

Python把 每一样东西 都作为对象,包括这个函数。

程序代码:
#!/usr/bin/python
def printMax(x, y):
    ''' Prints the maximum of two number.
    The two values must be integers.'''
    x = int(x)
    y = int(y)

    if x > y:
        print x, 'is maximum'
    else:
        print y, 'is maximum'

printMax(3,5)
print printMax.__doc__

$ ./func_doc.py
5 is maximum
 Prints the maximum of two number.
    The two values must be integers.
#8
madfrogme2012-08-31 23:28
sys 标准库模块 sys.argv, sys.path
程序代码:
#!/usr/bin/python
import sys
print 'The command line arguments are:'
for i in sys.argv:
    print i

print '\n\nThe PYTHONPATH is', sys.path, '\n'



$ ./using_sys.py this is a test
The command line arguments are:
./using_sys.py
this
is
a
test

The PYTHONPATH is ['/Users/wzj', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages']
#9
pangding2012-08-31 23:48
学习了。其实我对 python 只是懂点皮毛。
咱着有专门的 python 版块,如果你愿意也可以发到那边去。

4楼说的那个属性感觉有点扯。难道是希望调用者记住函数的形参名吗?
#10
madfrogme2012-09-01 06:20
那版主等我把楼盖上去了之后可以帮我移到python版啊,现在主要还是自己的学习阶段
#11
madfrogme2012-09-01 11:28
每个Python模块都有它的__name__ 属性,如果它是'__main__',这说明这个模块被用户单独运行,我们可以进行相应的恰当操作.

程序代码:
#!/usr/bin/python
# Filename: using_name.py

if __name__ == '__main__':
    print 'This program is being run by itself'
else:
    print 'I am being imported from another module'


[ 本帖最后由 madfrogme 于 2012-9-2 12:40 编辑 ]
#12
madfrogme2012-09-01 22:36
你可以使用内建的dir()函数来列出模块定义的标识符。标识符有函数、类和变量。

>>> import sys
>>> dir(sys)

['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
>>>
#13
madfrogme2012-09-02 11:10
对list 的操作

>>> shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> shoplist.append('rice)
>>> shoplist.sort()
>>> del shoplist[0]
>>> shoplist.count('apple')            看apple出现的次数
>>> shoplist.reverse()                    反转list
#14
madfrogme2012-09-02 11:39
元组  和列表十分类似,只不过元组和字符串一样是 不可变的 即你不能修改元组。元组通过圆括号中用逗号分割的项目定义。
程序代码:
>>> zoo = ('wolf', 'elephant', 'penguin')
>>> new_zoo = ('monkey', 'elephant',zoo)
>>> print len(new_zoo)
3
>>> print new_zoo[2][2]
penguin
>>>


[ 本帖最后由 madfrogme 于 2012-9-2 12:41 编辑 ]
#15
madfrogme2012-09-02 11:45
含有单个元素的元组就不那么简单了。你必须在第一个(唯一一个)项目后跟一个逗号
singleton = (2 , )

元组最通常的用法是用在打印语句中
print '%s is %d years old' % (name, age)
#16
madfrogme2012-09-02 13:22
字典的基本用法
程序代码:
#!/usr/bin/python

ab = {  'wzj'   :   'madfrogme@',
        'Larry' :   'larry@'
     }

print "wzj's address is %s" % ab['wzj']

ab['Guido'] = 'guido@'

del ab['Larry']

for name, address in ab.items():

    print "Contact %s at %s" % (name, address)

if 'Guido' in ab:

    print "Guido's address is %s" % ab['Guido']


$ ./ab.py
wzj's address is madfrogme@

Contact wzj at madfrogme@

Contact Guido at guido@

Guido's address is guido@


[ 本帖最后由 madfrogme 于 2012-9-2 14:24 编辑 ]
#17
madfrogme2012-09-03 22:35
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了.
#18
madfrogme2012-09-04 08:44
我们使用class语句后跟类名,创建了一个新的类。这后面跟着一个缩进的语句块形成类体。在这个例子中,我们使用了一个空白块,它由pass语句表示。
使用类名后跟一对圆括号来创建一个对象/实例
程序代码:

class Person:
    pass # 空语句

p = Person()    # 建立一个实例
print p

$ ./test.py
<__main__.Person instance at 0x109cec170>
存储对象的计算机内存地址也打印了出来
#19
madfrogme2012-09-04 08:53
类/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量
程序代码:
class Person:
       def sayHi(self):
              print 'Hello, how are you?'

p = Person()
p.sayHi() # 还可以被写成Person().sayHi()

注意sayHi方法没有任何参数,但仍然在函数定义时有self
#20
madfrogme2012-09-04 23:34
__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。__init__方法类似于C++、C#和Java中的 constructor 。
程序代码:

class Person:
    def __init__(self, name):
        self.name = name
    def sayHi(self):
        print 'Hello, my name is', self.name

p = Person('Wang')
p.sayHi()


$ ./t.py
Hello, how are you? Wang
#21
madfrogme2012-09-05 20:14
文件的操作,创建一个file类的实例,使用readline方法读文件的每一行
程序代码:

#!/usr/bin/python
poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
        use Python!
'''

f = file('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file

f = file('poem.txt')
# 如果不指定模式,默认为读模式
while True:
    line = f.readline()
    if len(line) == 0: # 表明到了EOF
        break
    print line,
    # 逗号是为了避免python 自动添加新行
f.close()

$ ./t.py
        Programming is fun
        When the work is donw
        If you wanna make your work also fun:
        use Python!

#22
madfrogme2012-09-06 22:41
Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无缺地取出来。这被称为 持久地 储存对象。

还有另一个模块称为cPickle,它的功能和pickle模块完全相同,只不过它是用C语言编写的,比pickle快1000倍.  import..as语法。这是一种便利方法,以便于我们可以使用更短的模块名称
程序代码:
#!/usr/bin/python

import cPickle as p

shoplistfile = "shoplist.data"

shoplist = ['apple', 'mango', 'carrot']

f = file(shoplistfile, 'w')

p.dump(shoplist, f)     #dump the object to a file

f.close()

del shoplist    # remove the shoplist

f = file(shoplistfile)

storedlist = p.load(f) # readback from the storage

print storedlist


$ ./t.py
['apple', 'mango', 'carrot']
1