python--005-函數參數、變量

·函數的參數
··參數
1、形式參數:parameter--形式參數
創建函數時,小括號內的參數
2、實際參數:argument--實參
函數調用時,小括號內傳遞進去的參數

··函數文檔
1、直接書寫字符串
2、用#標記單行的註釋
3、可以用print(‘內容’)直接輸出內容

#-- coding: utf-8 --
#這個函數求兩個數值之和
def add(num1,num2):
'把num1和num2 的和進行返回'#這行字符串是一個註釋
print ('求兩個值的和')
return num1+num2

print add(1,2)

函數文檔的讀取:
1、函數名.doc 兩個下劃線 屬性名 doc裏面存儲文本與註釋
int.doc
2.help(函數名)
help(str)

··關鍵字參數

定義了關鍵字的參數

1、位置參數:
直接給參數(和位置有關--一一對應)
2、關鍵字參數

    def myFunction(num1,num2):
    print num1,num2

    myFunction(num2='world',num1='hello')

    1、位置參數與關鍵字參數混用的時候,位置參數必須在關鍵字
            參數的前面
            def myFunction(a,b,c):
            print a,b,c
            myFunction(a='hello','world','python')

            返回錯誤

        2、不要給同一個形參多次賦值

          def myFunction(a,b,c):
          print a,b,c
          myFunction(a='hello',b='world',b='python')

            返回錯誤

···默認參數

是定義了默認值的參數

 def myFunction(a='hello',b='world'):
 print a,b
 myFunction('hhe','dsb')

    返回hehe das

1、默認參數與位置參數混用的時候,位置參數必須在默認參數之前,位置參數要前面放
    def myFunction(a='hello',b='world'):
    print a,b
    myFunction(,'dsb')

            返回錯誤 
    2、默認參數只能在函數定義階段賦值一次(僅僅一次)

      def myFunction(a='hello',b='world'):
       print a,b
       myFunction()

        關鍵字參數在函數調用時候定義,默認參數在函數定義的時候賦值。

····可變長參數(收集參數)

1、在參數前面加上*
將所有參數打包元祖,進行輸出

                    def fun(*a):
                    print a
                    fun('hehe','hello')

2、在參數上面加**
將所有參數打包成字典

·······命名關鍵字參數

可變長參數後面的參數應該使用命名關鍵字參數

    def fun(*a,b):
    print a
    fun('hehe','hello',b='world')

    def fun(b,*a):
    print a
    fun('hehe','hello','world')

1、可變長參數必須在位置參數後

print函數的參數就是可變長參數,輸出元祖

API文檔如何查看 help 或者F1

函數和過程

函數 function
過程 procedure

python 只有函數 ,沒有過程

····返回值

即便沒有在函數中寫return語句,函數也會返回一個結果,這個結果爲None,爲空數據類型。

如果要返回多個值,可以直接書寫,多個值之間用逗號隔開,返回值爲一個元祖。

···函數變量的作用域

變量有作用域(變量的可見性)

1、局部變量:local variable

        1、定義在函數內部的變量
        2、先賦值,後使用
        3、作用範圍從定義開始到包含代碼塊結束

2、全局變量 global variable

        1、定義在函數的外部
        2、先賦值後使用
        3、作用範圍:整個文件,可以被多個函數調用
        4、如果局部變量與全局變量發生衝突,以局部變量爲準

            def fun1(para1):
            print para1
            def fun2(para1):
            print para1
            a=10
            def fun3(para1):
                        a=20
                        print para1

            fun1(a)
            fun2(a)
            fun3(a)

在函數內部訪問全局變量的時候,在函數內部創建一個相同的局部變量,原來局部變量不變
a=10
def fun3():
a=20
print a
fun3()
print a

3、global 全局變量

  a=10
        def fun3():
                        global a
                        a=20
                        print a
        fun3()
        print a

        結果返回兩個20

        定義全局變量(如果在函數中修改global定義的變量,全局變量跟着改變)

·內嵌函數
定義在函數內部的函數:內嵌函數(內部函數)

內部函數的整個作用域,都在外部函數之內(從定義開始到包含它的代碼塊結束)

    1、外部函數的局部變量與內部函數的局部變量發生命名衝突,以內部函數的局部變量優先
    2.外部函數不能訪問內部函數的局部變量
    3.在內部函數中訪問外部函數的局部變量時,不能進行a+=1,這樣的操作,原因就是a+1中的局部變量a沒有賦值。

#lambda表達式
python 允許使用lambda表達式創建匿名函數

···匿名函數
沒有函數名的函數:
lambda表達式:
1、關鍵字:lambda
2、創建形式:lambda函數的參數:函數的實現
3、lambda語句構建了一個函數對象,返回一個函數對象的信息,只需要賦值

  fun=lambda a:a+1
      print fun(3)

4、如果傳入多個參數

    fun=lambda a,b,c:a+b+c
    print fun(2,3,4,)

··作用 
1、只需要使用一次,更加精簡,不要單獨創建函數
2、簡化代碼,提高代碼的可讀性

函數的嵌套與遞歸

··函數的嵌套:在一個函數中調用其他函數

解一元二次方程

                ax^2+bx+c=0

                x=frac{-b\pm{\sqrt{b^2-4ac}}}{2a}

    def jieFangCheng(a,b,c):
#先判斷方程有沒有解
            if qiuJie(a,b,c):#判斷qiuJie()返回的真還是假
    #繼續解方程求出所有的解
                delta = b*b-4*a*c
                x1=(-b+delta**0.5)/2*a
                x2=(-b-delta**0.5)/2*a
                print x1,x2

        else:
                print '無解'
     def qiuJie(a,b,c):
            delta=b*b-4*a*c
            if delta>=0:
                    return True
            else:
                    return False
        jieFangCheng(1,1,1)

        jieFangCheng(1,1,-1)

··遞歸

遞歸:自己調用自己

        def factorial(n):
                    if n==1:
                                return 1
                    return n*factorial(n-1)
            print(factorial(4))

注意:防止無窮遞歸 與循環不同
漢諾塔

    def han(a,b,c,n):
                if n==1:
                        print a+'---'+b
                else:
                        han(a,c,b,(n-1))
                        print a+'----'+b
                        han(c,b,a,(n-1))
    han('A','B','C',3)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章