作用域LOGIN

作用域

學過Java 的同學都知道,Java 的類別裡面可以給方法和屬性定義公共的( public )或者是私有的( private ),這樣做主要是為了我們希望有些函數和屬性能給別人使用或者只能內部使用。透過學習 Python 中的模組,其實和 Java 中的類別相似,那麼我們怎麼實現在一個模組中,有的函數和變數給別人使用,有的函數和變數只是在模組內部使用呢?

在 Python 中,是透過 _ 前綴來實現的。正常的函數和變數名稱是公開的(public),可以被直接引用,例如:abc,ni12,PI等;類似__xxx__這樣的變數是特殊變量,可以直接引用,但是有特殊用途,例如上面的__name__ 是特殊變量,還有__author__ 也是特殊變量,用來標示作者。注意,我們自己的變數一般不要用這種變數名;類似_xxx 和__xxx 這樣的函數或變數就是非公開的(private),不應該直接引用,例如_abc ,__abc 等;

注意,這裡是說不應該,而不是不能。因為 Python 種並沒有一種方法可以完全限制存取 private 函數或變量,但是,從程式設計習慣上不應該引用 private 函數或變數。

例如:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
def _diamond_vip(lv):
    print('尊敬的钻石会员用户,您好')
    vip_name = 'DiamondVIP' + str(lv)
    return vip_name
def _gold_vip(lv):
    print('尊敬的黄金会员用户,您好')
    vip_name = 'GoldVIP' + str(lv)
    return vip_name
def vip_lv_name(lv):
    if lv == 1:
        print(_gold_vip(lv))
    elif lv == 2:
        print(_diamond_vip(lv))
vip_lv_name(2)

輸出的結果:

尊敬的钻石会员用户,您好
DiamondVIP2

在這個模組中,我們公開vip_lv_name 方法函數,而其他內部的邏輯分別在_diamond_vip 和_gold_vip private函數中實現,因為是內部實作邏輯,呼叫者根本不需要關心這個函數方法,它只需關心呼叫vip_lv_name 的方法函數,所以用private 是非常有用的程式碼封裝和抽象的方法

#一般情況下,外部不需要引用的函數全部定義成private,只有外部需要引用的函數才定義為public。

下一節
章節課件