Tuesday, 26 May 2020

Belajar Python 3 - Function - Scope

Scope

Katakanlah kita memiliki fungsi dari latihan terakhir yang membuat string tentang item khusus:

def create_special_string(special_item):
    return "Our special is " + special_item + "."

Bagaimana jika kita ingin mengakses variabel special_item di luar fungsi? Bisakah kita menggunakannya?

def create_special_string(special_item):
    return "Our special is " + special_item + "."

print("I don't like " + special_item)

Jika kami mencoba menjalankan kode ini, kami akan mendapatkan NameError, yang memberi tahu kami bahwa 'special_item' is not defined. Variabel special_item  hanya didefinisikan di dalam ruang fungsi, jadi tidak ada di luar fungsi. Kami menyebut bagian dari program di mana special_item  dapat diakses ruang lingkupnya. Ruang lingkup special_item  hanya fungsi create_special_string .

Variabel yang ditentukan di luar lingkup fungsi dapat diakses di dalam tubuh fungsi:

header_string = "Spesial kami adalah"

def create_special_string (special_item):
    return header_string + special_item + "."
print (create_special_string ("grapes"))

Tidak ada kesalahan di sini. header_string dapat digunakan di dalam fungsi create_special_string karena cakupan header_string adalah seluruh file. File ini akan menghasilkan:

Spesial kami adalah anggur.

Instruksi
1. Di luar fungsi calcul_age (), cobalah untuk mencetak current_year. Apakah itu bekerja?
Script latihan :
def calculate_age(current_yearbirth_year):
  age = current_year - birth_year
  return age
print(current_year)

Hasil :
Traceback (most recent call last):
  File "script.py", line 4, in <module>
    print(age)
NameError: name 'age' is not defined

2. Bagaimana dengan usia? Di luar calcul_age (), cobalah untuk mencetak usia. Apakah itu bekerja?
Script latihan :
def calculate_age(current_yearbirth_year):
  age = current_year - birth_year
  return age
print(age)

Hasil :
Traceback (most recent call last):
  File "script.py", line 4, in <module>
    print(age)
NameError: name 'age' is not defined


3. Tidak! Meskipun kita mengembalikan usia di akhir fungsi, usia variabel tetap hanya ada dalam konteks fungsi.

Hapus kedua pernyataan cetak.
Script latihan :


Hasil :


4. Mari kita coba sesuatu yang berbeda. Hapus parameter current_year sehingga tidak lagi menjadi parameter dari calcul_age ().
Script latihan :
def calculate_agebirth_year):
  age = current_year - birth_year
  return age

Hasil :


5. Ini tahun 2048.

Tentukan current_year sebagai variabel SEBELUM mendefinisikan fungsi dan memberinya nilai 2048. Sekarang, setiap kali calcul_age () dipanggil, ia hanya akan mengambil birth_year.
Script latihan :
current_year = 2048
def calculate_age(birth_year):
  age = current_year - birth_year
  return age



6. Coba cetak current_year untuk terakhir kalinya. Apakah akhirnya berhasil?
Script latihan :
current_year = 2048
def calculate_age(birth_year):
  age = current_year - birth_year
  return age
print(current_year)

Hasil :
2048

7. Hore! Sekarang kita memiliki current_year yang didefinisikan secara global. Kerja bagus!

Mari kita pastikan fungsi kita masih berfungsi: cetak nilai calcul_age () dengan 1970 sebagai argumen.
Script latihan :
current_year = 2048
def calculate_age(birth_year):
  age = current_year - birth_year
  return age
print(calculate_age(1970))

Hasil :
78

Labels: