函數 function

@piepie01

函數操

定義域與對應域

函數像什麼

箱子?

輸入、做了甚麼、輸出?

用過了!!

用過!?

print("Hello, world!")

input?

output?

延伸閱讀:一連串的function call?

https://ithelp.ithome.com.tw/articles/10158923

例子

arr = [6,3,1]
if arr[0] > arr[1]:
    arr[0],arr[1] = arr[1],arr[0]
if arr[1] > arr[2]:
    arr[1],arr[2] = arr[2],arr[1]
if arr[0] > arr[1]:
    arr[0],arr[1] = arr[1],arr[0]

談天說地

talk sky speak ground

arr = [6,3,1]
if arr[0] > arr[1]:
    arr[0],arr[1] = arr[1],arr[0]
if arr[1] > arr[2]:
    arr[1],arr[2] = arr[2],arr[1]
if arr[0] > arr[1]:
    arr[0],arr[1] = arr[1],arr[0]

談天說地

talk sky speak ground

arr = [6,3,1]
swap(arr,0,1)
swap(arr,1,2)
swap(arr,0,1)
print(arr)

#output :[1,3,6]

不是談天說地

not talk sky speak ground

my_list = [2,3,1]
my_list = my_list.sort()
print(my_list)


s = "231,432"
s.replace(',',' ')
print(s)

練習

都是談天說地

all are talk sky speak ground

輸入不輸入

都是談天說地

all are talk sky speak ground

做事不做事

都是談天說地

all are talk sky speak ground

回傳不回傳

有點

list.count()

string.split()

沒點

max()

sum()

都是函式

function結構

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec metus justo. Aliquam erat volutpat.

function結構

def my_add(a,b):
    c = a+b
    return c

a = 2
b = 3
c = my_add(a,b)
print(c)

#output :5

function結構

def my_add(a1,b1):
    c1 = a1+b1
    return c1

a = 2
b = 3
c = my_add(a,b)
print(c)

#output :5

function結構

def my_add(a1,b1):

def  函式名稱(輸入參數):

function結構

def my_add(a1,b1):
    c1 = a1+b1

def  函式名稱(輸入參數):

[縮排]做事

function結構

def my_add(a1,b1):
    c1 = a1+b1
    return c1

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

function結構

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

function結構

def my_add(a1,b1):
    c1 = a1+b1
    return c1
def my_minus(a1,b1):

def my_times(a1,b1):

def my_over(a1,b1):

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

input要有兩個

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

input要有兩個

c1 = a1+b1

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

input要有兩個

c1 = a1+b1

 

回傳c1

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

input要有兩個

c1 = a1+b1

 

回傳c1

my_add(1,2)

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

a1=1,b1=2

my_add(1,2)

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

a1=1,b1=2

c1=3

my_add(1,2)

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

a1=1,b1=2

c1=3

回傳c1

my_add(1,2)

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

a1=1,b1=2

c1=3

回傳c1

my_add(1,2)

function執行順序

def my_add(a1,b1):
    c1 = a1+b1
    return c1
print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

發生什麼事

my_add

a1=1,b1=2

c1=3

回傳c1

my_add(1,2)

3

print(3)

function執行順序

print(my_add(1,2))
print(my_add(100,200))
print(my_add(101,201))
print(my_add(1000,2000))
print(my_add('1','2'))

def my_add(a1,b1):
    c1 = a1+b1
    return c1

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

function輸入不輸入

def make_me_a_table():
    l = []
    for _ in range(100):
        l.append(0)
    return l

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

function回傳不回傳

def print_the_largest_one(my_list):
    maximum = max(my_list)
    print(maximum)
    return

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

function做事(?

def do_nothing():
    pass

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

練習

https://www.csie.ntu.edu.tw/~b05902031/func.py

用它,喚它,使用它,使喚它

練習

Function--GCD練習

做它,製它,製作它

神奇的function-int, list在傳入函數時的比較

def ha(list1):
    list1[0]+=1
    return
def haha(i):
    i+=1
    return

my_list = [1]
my_i = 1
ha(my_list)
haha(my_i)
print(my_list)
print(my_i)

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

def list_test(my_list):
    my_list[0]+=1
    print('list in function : {}'.format(id(my_list)))
    return
def int_test(my_int):
    my_int+=1
    print('int in function : {}'.format(id(my_int)))
    return
li = [1,2,3,4]
a = 1
print('list outside : {}'.format(id(li)))
print('int outside : {}'.format(id(a)))
list_test(li)
int_test(a)

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

https://vinta.ws/code/python-的參數傳遞是-call-by-assignment.html

神奇的function-int, list在傳入函數時的比較

ID

回傳某變數的內存位置

print(id(var))

神奇的function-函數外的變數

def ha():
    print(my_list)
    return
def haha():
    print(my_i)
    return

my_list = [1]
my_i = 1
ha()
haha()

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

def ha():
    my_list = [1]
    return
def haha():
    my_i = 1
    return

ha()
haha()
print(my_list)
print(my_i)

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

不神奇的function-函數內的變數

全域變數VS區域變數

區域變數:函式中所宣告的變數

全域變數:非函式中所宣告的變數

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

延伸閱讀

http://www.geego.com.tw/technical-discussion-forum/tech-tips-buffer-overflow-stack-frame-%E6%95%99%E5%AD%B8-%E7%89%A9%E4%BB%B6/

全域變數VS區域變數

def my_add(a1,b1):
    return a1+b1
def my_minus(a1,b1):
    return a1-b1

def  函式名稱(輸入參數):

[縮排]做事

[縮排]回傳

狂call猛call

參數類型傳遞

1.傳入的參數如果是list or dict.....,修改後會影響函數外面的那個變數

2.傳入的參數如果是int or float......,修改後不影響函數外的那個變數

全域VS區域

1.函數間的區域變數無法互相存取

2.全域變數可以在函數中被存取出來

兩件完全不相干的事

單純就是科普

simple is science

def add_everything(*argv):
    return sum(argv)
print(add_everything(1,2,3,4))

單純就是科普

simple is science

def square(inp):
    return inp*inp

def func(name,times):
    def iters(base):
	res = base
	for i in range(times):
	    res = name(res)
	return res
    return iters
print(func(square,3)(2))

函式function

By piepie01

函式function

  • 890