= ตัวแปรที่มารับจะกลายเป็นฟังก์ชันซึ่งใช้งานได้เหมือนกับฟังก์ชันที่นิยามตอนแรก
def fuji():
    print('ฟังก์ชันถูกใช้งาน')
fun = fuji
fun()พิมพ์ = printพิมพ์('ข้อความ') แทน print('ข้อความ') ได้
พิมพ์('ทดสอบใช้พิมพ์') # ได้ ทดสอบใช้พิมพ์print ตัวแปรที่รับค่ามาดูก็จะยังพบว่ามันขึ้นชื่อว่าเป็นฟังก์ชันตัวเดิมอยู่
พิมพ์(พิมพ์) # ได้ 
พิมพ์(fun) # ได้ 
พิมพ์(พิมพ์.__name__) # ได้ printdef fujiA():
    print('A')
def fujiB():
    print('B')
fujiAB = (fujiA,fujiB)()
fujiAB[0]() # ได้ A
fujiAB[1]() # ได้ Bfor ได้
[f() for f in fujiAB]
list(map(lambda f:f(),fujiAB))fuji = 1
fuji() # ได้ TypeError: 'int' object is not callableprint = 'print'print ก็จะไม่สามารถใช้การได้อีกต่อไป กลายเป็นแค่ตัวแปรสายอักขระคำว่า 'print' ไป
print(print) # ได้ TypeError: 'str' object is not callableprint กลับมาใช้ได้เหมือนเดิมก็ต้องทำการปิดเชลโต้ตอบแล้วเปิดอันใหม่ ตัวแปรทั้งหมดที่ประกาศไว้จะถูกล้างทิ้งแล้วกลับสู่สภาพเริ่มต้นพิมพ์(print) # ได้ print
fun() # ได้ ฟังก์ชันถูกใช้งาน
print = พิมพ์def nok():
    def nai():
        return 1
    a = nai()
    return a
print(nok()) # ได้ 1nok มีการนิยามฟังก์ชัน nai ขึ้นและใช้ทันทีprint(nai()) # ได้ NameError: name 'nai' is not definedreturn
def nok():
    def nai():
        return 1
    return nai
print(nok()) # ได้ .nai at 0x1123bd620>return nai โดยไม่มีวงเล็บ ไม่ใช่ return nai() เพราะสิ่งที่ต้องการส่งออกมานั้นคือตัวฟังก์ชันด้านใน ไม่ใช่ค่าที่ฟังก์ชันด้านในคืนออกมาอีกต่อnok ทำงานโดยคืนค่าฟังก์ชัน nai ซึ่งอยู่ภายในออกมา และฟังก์ชันนี้สามารถนำมาใช้ได้จริงด้วย
a = nok()
print(a()) # ได้ 1 print(nok()()) # ได้ 1nok() จะคืนค่า nai มา ดังนั้น nok()() ก็จะเท่ากับ nai() ซึ่งจะคืนค่า 1def nok():
    def klang():
        def nai():
            return 1
        return nai
    return klang
print(nok()()()) # ได้ 1 def nok(x):
    def nai():
        return x
    a = nai()
    return a
print(nok(5)) # ได้ 5def nok(x):
    def klang(y):
        def nai(z):
            return '%d+%d+%d'%(x,y,z)
        return nai
    return klang
print(nok(2)(3)(4)) # ได้ 2+3+4def nok():
    def nai1():
        return 1
    def nai2():
        return 2
    def nai3():
        return 3
    return (nai1,nai2,nai3)
print(nok())  # ได้ (.nai1 at 0x1123bdbf8>, .nai2 at 0x11272ef28>, .nai3 at 0x11272ed08>)() ต่อไปอีก
print(nok()[0]) # ได้ .nai1 at 0x1123bdbf8>
print(nok()[0]()) # ได้ 1
print(nok()[1]()) # ได้ 2for หรือ map ช่วยก็ได้
print([f() for f in nok()]) # ได้ [1, 2, 3]
print(list(map(lambda x:x(),nok()))) # ได้ [1, 2, 3]def nok(t):
    def nai1(x):
        return t+x
    def nai2(y):
        return t+y
    def nai3(z):
        return t+z
    return (nai1,nai2,nai3)
print(nok('A')[0]('1'))
print([f('3') for f in nok('B')])
print([f(str(i)) for i,f in enumerate(nok('C'),start=1)])
print(list(map(lambda f:f[1](str(f[0])),enumerate(nok('D'),start=4))))
print([nok(x)[y](z) for x,y,z in zip('123',(0,1,2),'ABC')])
print(list(map(lambda f:nok(f[0])[f[1]](f[2]),zip('456',(0,1,2),'DEF')))) A1
['B3', 'B3', 'B3']
['C1', 'C2', 'C3']
['D4', 'D5', 'D6']
['1A', '2B', '3C']
['4D', '5E', '6F']def nok(x):
    def klang1(y):
        def nai1(z):
            return x+y+z+'๑'
        def nai2(z):
            return x+y+z+'๒'
        return (nai1,nai2)
    def klang2(y):
        def nai1(z):
            return x+y+z+'๓'
        def nai2(z):
            return x+y+z+'๔'
        return (nai1,nai2)
    return (klang1,klang2)
print([nok(x)[a](y)[0]('ก') for x,a,y in zip('12',(0,1),'AB')])
print([nok(x)[a](y)[b](z) for x,a,y,b,z in zip('1234',(0,1,0,1),'ABCD',(1,0,0,1),'กขคง')]) ['1Aก๑', '2Bก๓']
['1Aก๒', '2Bข๓', '3Cค๑', '4Dง๔']def nok():
    x = '==ตัวแปรที่ประกาศในฟังก์ชัน nok แต่นอกฟังก์ชัน nai=='
    def nai():
        print(x)
    return nai
ni = nok()nok ขึ้นมาโดยที่ข้างในมีตัวแปร x จากนั้นก็นิยามฟังก์ชัน nai ซึ่งมีการเรียกใช้ตัวแปร x จากนั้นสุดท้ายฟังก์ชัน nok จะ return ฟังก์ชัน nai ออกมาnok ทำงาน โดยคืนค่ามาแล้วให้ตัวแปร ni รับไว้ ดังนั้นในตอนนี้ตัวแปร ni จะรับเอาฟังก์ชัน nai และจะสามารถใช้งานได้ในฐานะฟังก์ชัน nainai จะเห็นว่ามีการเรียกใช้ตัวแปร x แต่ว่าดังที่เคยกล่าวไปแล้วว่าตัวแปรที่ประกาศภายในฟังก์ชันจะถูกเรียก ใช้ได้แค่ภายในฟังก์ชันเท่านั้น และพอฟังก์ชันสิ้นสุดการทำงานลงตัวแปรนั้นก็จะถูกลบไปni น่าจะไม่สามารถทำงานได้หรือเปล่า? เพราะฟังก์ชัน nok ได้สิ้นสุดการทำงานไปแล้ว เหลือไว้แค่ฟังก์ชัน nai ที่คืนค่าออกมาni สามารถทำงานได้ตามปกติไม่มีขาดตกบกพร่อง
ni() # ได้ ==ตัวแปรที่ประกาศในฟังก์ชัน nok แต่นอกฟังก์ชัน nai==nok นั้นเป็นแค่ฟังก์ชันที่ทำหน้าที่ผลิตฟังก์ชัน nai เพื่อจะนำฟังก์ชัน nai ที่ได้มาใช้งานอีกทีdef nok(a):
    def nai():
        print(a)
    return nai
ni2 = nok(2)
ni7 = nok(7)
ni2() # ได้ 2
ni7() # ได้ 7ni2 และ ni7 ก็ถูกสร้างขึ้นมาจากฟังก์ชัน nok เหมือนกัน เพียงแต่ใส่ค่าต่างกันไปทำให้มันมีคุณสมบัติไม่เหมือนกันni2 และ ni7 จะเกิดจากฟังก์ชัน nai เหมือนกัน แต่ว่าในเวลาที่ฟังก์ชัน ni2 ถูกสร้างขึ้นมามันได้จดจำว่า a มีค่าเป็น 2 ส่วน ni7 จะจำว่า a มีค่าเป็น 7def ขึ้นมา ๒ ครั้ง
def ni2():
    print(2)
def ni7():
    print(7)def แค่ครั้งเดียวdef แล้วมีนิยามตายตัว แต่หากใช้วิธีนี้แล้วเราจะสามารถสร้างฟังก์ชันได้หลากหลายรูปแบบnai เหมือนกันดังนั้นหากลอง print ดูข้อมูลของตัวฟังก์ชันจะพบว่าชื่อก็ยังเป็น nai เหมือนกัน แต่ถึงอย่างนั้นก็มีการเก็บค่าคนละที่แยกต่างหาก
print(ni2) # ได้ .nai at 0x112770d08>
print(ni7) # ได้ .nai at 0x112770048>
print(ni2.__name__) # ได้ nai
print(ni7.__name__) # ได้ nai def nok(a):
    def nai():
        print(a, end='>')
    return nai
nini = [nok(i) for i in range(10)]
for f in nini:
    f()
# ได้ 0>1>2>3>4>5>6>7>8>9>ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ