Python - Fungsi

Fungsi adalah blok kode terorganisir dan dapat digunakan kembali yang digunakan untuk melakukan satu tindakan terkait. Functions menyediakan modularitas yang lebih baik untuk aplikasi Anda dan penggunaan ulang kode tingkat tinggi.

Seperti yang sudah Anda ketahui, Python memberi Anda banyak fungsi bawaan seperti print (), dll. Tetapi Anda juga dapat membuat fungsi Anda sendiri. Fungsi ini disebut fungsi yang ditentukan pengguna.

Mendefinisikan Fungsi

Anda dapat menentukan fungsi untuk menyediakan fungsionalitas yang diperlukan. Berikut adalah aturan sederhana untuk mendefinisikan fungsi dengan Python.

  • Blok fungsi dimulai dengan kata kunci def diikuti dengan nama fungsi dan tanda kurung (()).

  • Parameter atau argumen masukan apa pun harus ditempatkan di dalam tanda kurung ini. Anda juga dapat menentukan parameter di dalam tanda kurung ini.

  • Pernyataan pertama dari suatu fungsi dapat berupa pernyataan opsional - string dokumentasi dari fungsi atau docstring .

  • Blok kode dalam setiap fungsi dimulai dengan titik dua (:) dan diberi indentasi.

  • Pernyataan return [ekspresi] keluar dari suatu fungsi, secara opsional meneruskan ekspresi ke pemanggil. Pernyataan return tanpa argumen sama dengan return None.

Sintaksis

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

Secara default, parameter memiliki perilaku posisi dan Anda perlu menginformasikannya dalam urutan yang sama seperti yang ditentukan.

Contoh

Fungsi berikut mengambil string sebagai parameter input dan mencetaknya pada layar standar.

def printme( str ):
   "This prints a passed string into this function"
   print str
   return

Memanggil Fungsi

Mendefinisikan fungsi hanya memberinya nama, menentukan parameter yang akan disertakan dalam fungsi dan menyusun blok kode.

Setelah struktur dasar suatu fungsi diselesaikan, Anda dapat menjalankannya dengan memanggilnya dari fungsi lain atau langsung dari prompt Python. Berikut adalah contoh untuk memanggil fungsi printme () -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme("I'm first call to user defined function!")
printme("Again second call to the same function")

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

I'm first call to user defined function!
Again second call to the same function

Lewati referensi vs nilai

Semua parameter (argumen) dalam bahasa Python diteruskan dengan referensi. Artinya jika Anda mengubah apa yang dirujuk oleh parameter dalam suatu fungsi, perubahan tersebut juga mencerminkan kembali fungsi pemanggilan. Misalnya -

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist.append([1,2,3,4]);
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Di sini, kami mempertahankan referensi dari objek yang diteruskan dan menambahkan nilai di objek yang sama. Jadi, ini akan menghasilkan hasil sebagai berikut -

Values inside the function:  [10, 20, 30, [1, 2, 3, 4]]
Values outside the function:  [10, 20, 30, [1, 2, 3, 4]]

Ada satu contoh lagi di mana argumen diteruskan oleh referensi dan referensi ditimpa di dalam fungsi yang dipanggil.

#!/usr/bin/python

# Function definition is here
def changeme( mylist ):
   "This changes a passed list into this function"
   mylist = [1,2,3,4]; # This would assig new reference in mylist
   print "Values inside the function: ", mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print "Values outside the function: ", mylist

Parameter mylist bersifat lokal ke fungsi changeme. Mengubah daftar saya di dalam fungsi tidak mempengaruhi daftar saya . Fungsi tersebut tidak menyelesaikan apa pun dan akhirnya ini akan menghasilkan hasil sebagai berikut -

Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]

Argumen Fungsi

Anda bisa memanggil suatu fungsi dengan menggunakan tipe argumen formal berikut -

  • Argumen yang diperlukan
  • Argumen kata kunci
  • Argumen default
  • Argumen panjang variabel

Argumen yang diperlukan

Argumen yang diperlukan adalah argumen yang diteruskan ke suatu fungsi dalam urutan posisi yang benar. Di sini, jumlah argumen dalam pemanggilan fungsi harus sama persis dengan definisi fungsi.

Untuk memanggil fungsi printme () , Anda pasti perlu memberikan satu argumen, jika tidak maka akan memberikan kesalahan sintaks sebagai berikut -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme()

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Traceback (most recent call last):
   File "test.py", line 11, in <module>
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

Argumen kata kunci

Argumen kata kunci terkait dengan pemanggilan fungsi. Saat Anda menggunakan argumen kata kunci dalam panggilan fungsi, pemanggil mengidentifikasi argumen dengan nama parameter.

Ini memungkinkan Anda untuk melewati argumen atau menempatkannya tidak berurutan karena interpreter Python dapat menggunakan kata kunci yang disediakan untuk mencocokkan nilai dengan parameter. Anda juga dapat membuat panggilan kata kunci ke fungsi printme () dengan cara berikut -

#!/usr/bin/python

# Function definition is here
def printme( str ):
   "This prints a passed string into this function"
   print str
   return;

# Now you can call printme function
printme( str = "My string")

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

My string

Contoh berikut memberikan gambaran yang lebih jelas. Perhatikan bahwa urutan parameter tidak menjadi masalah.

#!/usr/bin/python

# Function definition is here
def printinfo( name, age ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Name:  miki
Age  50

Argumen default

Argumen default adalah argumen yang mengasumsikan nilai default jika nilai tidak disediakan dalam pemanggilan fungsi untuk argumen itu. Contoh berikut memberikan gambaran tentang argumen default, ini mencetak usia default jika tidak diteruskan -

#!/usr/bin/python

# Function definition is here
def printinfo( name, age = 35 ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Now you can call printinfo function
printinfo( age=50, name="miki" )
printinfo( name="miki" )

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Name:  miki
Age  50
Name:  miki
Age  35

Argumen panjang variabel

Anda mungkin perlu memproses suatu fungsi untuk lebih banyak argumen daripada yang Anda tentukan saat mendefinisikan fungsi. Argumen ini disebut argumen panjang variabel dan tidak dinamai dalam definisi fungsi, tidak seperti argumen wajib dan default.

Sintaks untuk fungsi dengan argumen variabel non-kata kunci adalah ini -

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

Tanda bintang (*) ditempatkan sebelum nama variabel yang menyimpan nilai dari semua argumen variabel bukan kata kunci. Tupel ini tetap kosong jika tidak ada argumen tambahan yang ditentukan selama pemanggilan fungsi. Berikut adalah contoh sederhana -

#!/usr/bin/python

# Function definition is here
def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print "Output is: "
   print arg1
   for var in vartuple:
      print var
   return;

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Output is:
10
Output is:
70
60
50

The Anonymous Fungsi

Fungsi-fungsi ini disebut anonim karena tidak dideklarasikan dengan cara standar dengan menggunakan kata kunci def . Anda dapat menggunakan kata kunci lambda untuk membuat fungsi anonim kecil.

  • Formulir lambda dapat mengambil sejumlah argumen tetapi hanya mengembalikan satu nilai dalam bentuk ekspresi. Mereka tidak boleh berisi perintah atau beberapa ekspresi.

  • Fungsi anonim tidak bisa menjadi panggilan langsung untuk dicetak karena lambda memerlukan ekspresi

  • Fungsi Lambda memiliki namespace lokalnya sendiri dan tidak dapat mengakses variabel selain yang ada di daftar parameternya dan yang ada di namespace global.

  • Meskipun tampaknya lambda adalah versi satu baris dari suatu fungsi, mereka tidak setara dengan pernyataan sebaris di C atau C ++, yang tujuannya adalah dengan meneruskan alokasi tumpukan fungsi selama pemanggilan untuk alasan kinerja.

Sintaksis

Sintaks fungsi lambda hanya berisi satu pernyataan, yaitu sebagai berikut -

lambda [arg1 [,arg2,.....argn]]:expression

Berikut adalah contoh untuk menunjukkan cara kerja bentuk fungsi lambda -

#!/usr/bin/python

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function
print "Value of total : ", sum( 10, 20 )
print "Value of total : ", sum( 20, 20 )

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Value of total :  30
Value of total :  40

The pengembalian Pernyataan

Pernyataan return [ekspresi] keluar dari suatu fungsi, secara opsional meneruskan ekspresi ke pemanggil. Pernyataan return tanpa argumen sama dengan return None.

Semua contoh di atas tidak mengembalikan nilai apa pun. Anda dapat mengembalikan nilai dari fungsi sebagai berikut -

#!/usr/bin/python

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2
   print "Inside the function : ", total
   return total;

# Now you can call sum function
total = sum( 10, 20 );
print "Outside the function : ", total

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Inside the function :  30
Outside the function :  30

Ruang Lingkup Variabel

Semua variabel dalam program mungkin tidak dapat diakses di semua lokasi dalam program itu. Ini tergantung di mana Anda telah mendeklarasikan variabel.

Cakupan variabel menentukan porsi program tempat Anda dapat mengakses pengenal tertentu. Ada dua cakupan dasar variabel di Python -

  • Variabel global
  • Variabel lokal

Variabel Global vs. Lokal

Variabel yang ditentukan di dalam badan fungsi memiliki cakupan lokal, dan variabel yang ditentukan di luar memiliki cakupan global.

Ini berarti bahwa variabel lokal hanya dapat diakses di dalam fungsi yang dideklarasikan, sedangkan variabel global dapat diakses di seluruh badan program dengan semua fungsi. Saat Anda memanggil suatu fungsi, variabel yang dideklarasikan di dalamnya dimasukkan ke dalam ruang lingkup. Berikut adalah contoh sederhana -

#!/usr/bin/python

total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them."
   total = arg1 + arg2; # Here total is local variable.
   print "Inside the function local total : ", total
   return total;

# Now you can call sum function
sum( 10, 20 );
print "Outside the function global total : ", total

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Inside the function local total :  30
Outside the function global total :  0