1. 程式人生 > >Python基礎之函數和模塊

Python基礎之函數和模塊

導入模塊 形式參數 新的 定義 運行 pychar 完成 重復利用 鼠標

函數的基本使用

  • 函數的定義:把具有獨立功能的代碼塊組織成一個小模塊,在需要的時候調用。或者說,函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。
  • 函數的使用:1.定義函數;2.調用函數。
  • 函數的作用:能提高應用的模塊性,和代碼的重復利用率。
  • 自己創建函數,叫做用戶自定義函數。

函數的快速體驗

在一個py文件中定義一個函數,在另一個文件中,導入函數,調用函數。

定義函數:
hello_func.py

def hello():
    print("hello world")
    print("hello python")

調用函數:

sayhello.py

import hello_func
hello_func.hello()

函數定義的語法格式

def 函數名():
    被封裝的函數代碼

函數的命名

  • 函數名稱,應該見名知意
  • 應該符合 標識符的命名規則
  • 由字母,數字,下劃線組成
  • 不能以數字開頭
  • 不能與關鍵字重名

函數的調用

直接 函數名() 即可;調用格式及示例如下:

# 函數名()
sayhello()

函數演練

def say_hello():
    print("hello world 1")
    print("hello world 2")
    print("hello world 3")

say_hello()

函數的註意事項

  1. 函數被定義後並不會被運行,只是封裝了函數而已,要使用函數需要調用函數。

  2. 當斷點調試經過函數時,並不會執行,會跳過,只有當後面調用時,才會去函數中依次執行代碼,執行完成後再重新回到調用函數後面的代碼

  3. 先定義再調用;沒定義函數就先調用,會報錯;所以應該先定義函數,再調用函數;

  4. f8和f7單步越過和單步進入;f8單步執行時,經過函數調用時會直接執行整的函數而不進入內部;
    f7單步執行時,經過函數調用時會進入函數內部一步一步執行。

函數的文檔註釋

在函數定義下的第一行,添加連續的三對雙引號,在雙引號中間進行文字註釋;
在函數調用處可以用ctrl+q,查看函數說明
註釋如下:

def say_hello():
    """輸出三次打招呼"""
    print("hello 黎明1")
    print("hello 黎明2")
    print("hello 黎明3")

函數的參數與返回值

無參數的函數示例

def sum2num():
    num1 = 10
    num2 = 20
    s = num1 + num2

    print("%d和%d的和為%d" % (num1, num2, s))


sum2num()

沒有參數的函數只能計算固定的數字,過於死板,作用不大。

函數參數的使用

def sum2num(num1, num2):
    """將傳進來的兩個參數求和並輸出"""
    s = num1 + num2
    print("%d和%d的和為%d" % (num1, num2, s))


sum2num(10, 20)  # 10和20的和為30
sum2num(30, 45)  # 30和45的和為75

參數的使用:在函數名後面的小括號內填寫參數,多個參數之間用逗號分隔;

參數的作用
增加函數的通用性,真毒以相同的數據處理邏輯,能夠適應更多的數據。
1.在函數內部,把參數當做變量使用,進行需要的數據處理;
2.函數調用時,按照函數定義的參數順序,把希望在函數內部處理的數據,通過參數傳遞。

形參和實參

定義函數時傳遞的參數叫形參,用來接收參數用的,在函數內部作為變量使用;
調用函數時傳遞的參數叫實參,用來把數據傳到函數內部;
例如:

def sum2num(num1, num2):  # 這裏的就是形參,即形式參數,一個架子,同時函數內部使用的,都是形參
    s = num1 + num2
    print("%d和%d的和為%d" % (num1, num2, s))


sum2num(10, 20)  # 這裏的就是實參,即實際傳送的參數
sum2num(30, 45)  # 這裏的就是實參,即實際傳送的參數

函數返回值

  • 函數在執行後,返回給調用者函數執行的結果,方便調用者針對返回結果做相應的處理;
  • 在函數中想要返回結果,用一個return 加上要返回的結果即可;
  • 在調用函數後,想要函數返回的結果,用一個變量接收即可。

接收函數的返回值示例

def sum2num(num1, num2):
    """將傳進來的兩個參數求和並返回結果"""
    s = num1 + num2
    # 可以用返回值,告訴調用者計算結果
    return s


# 可以用變量接收函數的返回結果
result = sum2num(10, 20)
print("計算結果為:%d" % result)

return關鍵字的註意事項:return表示返回,後面的函數代碼都不會被執行(無法到達),應註意別在return下面寫代碼

函數的嵌套調用

函數嵌套調用示例

函數的嵌套調用示例

def test1():
    print("*"*50)


def test2():
    print("-"*50)
    test1()
    print("+"*50)


test2()
# 執行結果如下
# --------------------------------------------------
# **************************************************
# ++++++++++++++++++++++++++++++++++++++++++++++++++

參數與分割線的打印示例

# 版本1
# def print_line():
#     print("*" * 50)
# print_line()


# 版本2
# def print_line(char):
#     print(char * 50)
# print_line("-")

# 版本3
def print_line(char, times):
    print(char * times)
print_line("hi ", 50)

打印多行分割線示例

def print_line(char, times):
    print(char * times)


def print_lines():
    row = 1
    while row <= 5:
        print_line("-", 50)
        row += 1


print_lines()

按需打印分割線示例

def print_line(char, times):
    print(char * times)


def print_lines(char, times, lines):
    row = 1
    while row <= lines:
        print_line(char, times)
        row += 1


print_lines("-", 40, 6)
print_lines("+", 50, 6)

給函數增加文檔註釋

當參數過多或者過久了再看代碼,極有可能會忘記各個參數代表什麽,因此很有必要添加文檔註釋;
增加函數文檔註釋有兩種方法:

  1. 當函數寫完後,在def下一行添加三個一對雙引號,回車,系統就會自動幫你生成含函數參數的部分註釋,再加上自己的註釋即可;
  2. 點擊函數名,將鼠標移動到出現的燈泡處,會有一個小三角,點擊找到 給函數添加短文檔註釋,然後添加自己的註釋即可。

添加文檔註釋後效果如下:

def print_line(char, times):
    """
    :param char:用於分割的字符
    :param times:每行分割字符的數量
    :return:
    """
    print(char * times)


def print_lines(char, times, lines):
    """
    按照客戶需求打印分割線,完全自定義打印多少行,什麽分隔符,每行多少個分隔符
    :param char: 用於分割的字符
    :param times: 每行分割字符的數量
    :param lines: 打印分割線的行數
    :return:
    """
    row = 1
    while row <= lines:
        print_line(char, times)
        row += 1


print_lines("-", 40, 6)
print_lines("+", 50, 6)

模塊的介紹

模塊時Python程序架構的一個核心概念;
模塊就好比一個工具包,而裏面的函數和變量就是工具;

模塊的概念

所有以.py結尾的源文件都是一個模塊,在文件中定義的[全局]變量和函數都能給外界使用,使用的前提是import導入模塊

模塊的演練

在一個文件創建兩個函數和一個全局變量,在另一個文件導入第一個文件,.函數 即可調用函數, .變量 即可調用變量

定義函數:
hello_func.py

def hello():
    print("hello world")
    print("hello python")

name = "小明"

調用函數:
sayhello.py

import cp_01hello_func

hello_func.hello()
hello_func.name

註意:模塊名也是標識符,需要遵循標識符的命名規則
如果在給py文件命名時以數字開頭,在pycharm中無法調用這個模塊,會報錯;

pyc文件提高程序性能(了解即可)

當我們導入模塊時,系統會檢查是否有這個模塊的編譯緩存文件,如果沒有則創建,有則不做事,因為對模塊文件進行了預編譯緩存,所以當我們調用時就不需要重新去模塊中一行一行執行了,而是直接使用。
為什麽會將模塊預編譯成二進制文件?因為模塊時已經經過測試的代碼,並且修改較少,所以可以進行預編譯,就算偶爾進行了修改,程序也能幫我們進行檢測重新編譯新的二進制文件。

Python基礎之函數和模塊