python學習整理

一、  「\」  換行 - python

例: if (1 < 2)and \ express

        (2 < 3):  安全

                print "11111111111111" 函數

二、同一行寫多個語句 ui

    import sys; x = "foo"; sys.stdout.write(x+'\n') this

三、 「\n」 輸出換行 spa

    print  「abc」 + 「\n」 +「def」 code

    >>abc orm

        def 對象

四、縮進相同的一組語句構成代碼塊,即代碼組。像if、while、def、class這樣的複合語句,首行以關鍵字開始,以冒號(:)結束,該行以後的一行或多行代碼構成代碼組, 咱們將首行及後面的代碼組稱爲一個子句(clause)。經過縮進來分隔代碼組

五、多元賦值:

    >>>x, y, z = 1, 2, "aaaa"

六、兩個變量交換

    >>>x, y = 1, 2

    >>>x, y = y, x

七、內建(built_in)

    built_in是__builtins__模塊的成員,在程序開始或在交互解釋器中給出>>>提示以前,有解釋器自動導入的,能夠把他們當作適用在任何一級python代碼的全局變量

八、>>>s = {}.fromkeys(("a", "b", "c", "d"), 42)

    >>>print s

            {"a":42, "b":42, "c":42, "d":42}   

九、

#也可使用'{0}','{1}'形式的佔位符   print('{0},I\'m {1},my E-mail is {2}'.format('Hello','Hongten','hongtenzone@foxmail.com'))   #能夠改變佔位符的位置 print('{1},I\'m {0},my E-mail is {2}'.format('Hongten','Hello','hongtenzone@foxmail.com'))
#使用'{name}'形式的佔位符  print('Hi,{name},{message}'.format(name = 'Tom',message = 'How old are you?'))

#5開平方,小數點保留位數依據{1}的數值 print('is,{0:.{1}f}'.format(math.sqrt(5), 4) 'is 2.2361' 

十、靜態方法(staticmethod())和類方法(classmethod())   

classmethod:類方法
staticmethod:靜態方法

在python中,靜態方法和類方法都是能夠經過類對象和類對象實例訪問。可是區別是:

  • @classmethod 是一個函數修飾符,它表示接下來的是一個類方法,而對於日常咱們見到的則叫作實例方法。 類方法的第一個參數cls,而實例方法的第一個參數是self,表示該類的一個實例。
  • 普通對象方法至少須要一個self參數,表明類對象實例
  • 類方法有類變量cls傳入,從而能夠用cls作一些相關的處理。而且有子類繼承時,調用該類方法時,傳入的類變量cls是子類,而非父類對於類方法,能夠經過類來調用,就像C.f(),有點相似C++中的靜態方法, 也能夠經過類的一個實例來調用,就像C().f(),這裏C(),寫成這樣以後它就是類的一個實例了。
  • 靜態方法則沒有,它基本上跟一個全局函數相同,通常來講用的不多
Example 1:

> > > class a ( ) :

@staticmethod
def staticm():
print 'static'
def normalm(self):
print 'nomarl',self
@classmethod
def classm(cls):
print 'class',cls


>>> a1=a()
>>> a1.normalm()
nomarl <__main__.a instance at 0x84dddec>
>>> a1.staticm()
static
>>> a1.classm()
class __main__.a
>>> type(a)
<type 'classobj'>
>>> type(a1)
<type 'instance'>



Example 2:

class A(object):
@classmethod
def cm(cls):
print '類方法cm(cls)調用者:', cls.__name__
@staticmethod
def sm():
print '靜態方法sm()被調用'

class B(A):
pass

A.cm()
B.cm()

A.sm()
B.sm()

輸出:

類方法cm(cls)調用者: A
類方法cm(cls)調用者: B
靜態方法sm()被調用
靜態方法sm()被調用


九、全部的函數都有一個內置的屬性__doc__,它會返回在函數源代碼中定義的文檔字符串

    引入模塊,使用模塊的內置屬性__doc__就能夠獲取到模塊的解釋說明字符串

    >>>import sys

    >>>print sys.__doc__

    定義的函數能夠經過model.function()訪問到,當模塊被導入時def語句會被執行,函數也就定義好,函數的文檔變量是function.__doc__

十、exec和eval默認的,eval 和 exec 所運行的代碼都位於當前的名稱空間中,它們也能夠接受一個或兩個可選字典參數做爲代碼執行的全局名稱空間和局部名稱空間

    (1)exec是一個語句不是函數

            exec語句是用來執行儲存在字符串或文件中的python語句

            例:>>>exec  「 if  1 < 2: print   ‘this  is  good!’ 」

                  回車結果爲:this  is good!

        exec執行字符串語句存在安全風險,由於exec可能會干擾命名空間,即改變不該該變的變量。

        例如:>>>from math import sqrt

                >>>exec  "sqrt=1"

                >>>sqrt(4)

                會報錯

                從上面的例子能夠看出,exec干擾了命名空間,改變了sqrt的值,使其不是一個函數而變成1了。因而可知,若是對exec不加限制就會存在安全風險。下面是改進措施。

               措施:經過增長 in <scope>來實現,其中的<scope>是一個字典,該字典起到放置代碼字符串命名空間的做用。這樣exec執行的代碼只會在<scope>表明的命名空間中起做用。如

               

        例如:>>>scope={}   #字典

                >>>from math import sqrt

                >>>exec  "sqrt=1"  in scope

                >>>sqrt(4)

                結果2.0

                >>>scope["sqrt"]

                結果1

    (2)eval

        eval 會計算字符串形式的Python表達式,並返回結果的值。

               exec語句不會返回任何對象。而eval會返回表達式的值。下面的代碼能夠建立一個Python計算器:

1 #Python計算器
2 print  eval(raw_input("Please input an arithmetic expression:"))

十一、str和repr

    (1)str()的輸出針對用戶比較多,致力生成一個對象的可讀性好的字符串表示

    (2)repr()的輸出針對python比較友好,可經過eval()從新得到該對象

        例:>>>a = 「aaa」

              >>>eval(repr(a))

            結果:"aaa"

            obj = eval(repr(obj))是成立的

>>> import types >>> type(1)==types.IntType True >>> type("1")==types.StringType True

十二、globals返回全局變量的字典,locals返回局部變量的值

 例如:有一個名爲parameter的全局變量,那麼在combine(parameter)函數內部訪問全局變量時,由於與參數重名,必須使用globals()['parameter']獲取。代碼以下:

1 defcombine(parameter):
2     printparameter+globals()['parameter']
3  
4 #函數調用
5 parameter="hello"
6

combine("berry")

相關文章
相關標籤/搜索