函式是第一類物件,即函式可以被當做資料處理。
1.引用
x = 'hello nick'
y = x
f = func
print(f)
2.當作引數傳給乙個函式
len(x)
def foo(m):
m()foo(func)
from func
3.可以當作函式的返回值
def foo(x):
return x
res = foo(func)
print(res)
res()
from func
4.可以當作容器型別的元素
l = [x]
function_list = [func]
function_list[0]()
from func
函式內部定義的函式,無法在函式外部使用內部定義的函式。
def f1():
def f2():
print('from f2')
f2()
f1()
from f2
def max2(x, y):
if x > y:
return x
else:
return y
def max4(a, b, c, d):
res1 = max2(a, b)
res2 = max2(res1, c)
res3 = max2(res2, d)
return res3
print(max4(1, 2, 3, 4))
命名空間(name spaces):在記憶體管理那一章節時,我們曾說到變數的建立其實就是在記憶體中開闢了乙個新的空間。但是我們一直在迴避變數名的儲存,其實在記憶體中有一塊記憶體儲存變數名與變數間的繫結關係的空間,而這個空間稱為命名空間。
1.1內建命名空間
內建命名空間:存放pyhton直譯器自帶的名字,如int、float、len
生命週期:在直譯器啟動時生效,在直譯器關閉時失效
1.2全域性命名空間
全域性命名空間:除了內建和區域性的名字之外,其餘都存放在全域性命名空間,如下面**中的x、func、l、z
生命週期:在檔案執行時生效,在檔案執行結束後失效
x = 1
def func():
pass
l = [1, 2]
if 3 > 2:
if 4 > 3:
z = 3
1.3區域性命名空間
區域性命名空間:用於存放函式呼叫期間函式體產生的名字,如下面**的f2
生命週期:在檔案執行時函式呼叫期間時生效,在函式執行結束後失效
def f1():
def f2():
print('from f2')
f2()
f1()
域指的是區域,作用域即作用的區域。
全域性作用域:全域性有效,全域性存活,包含內建命名空間和全域性命名空間。
2.1全域性作用域
# 全域性作用域
x = 1
def bar():
print(x)
bar()
1
2.2 區域性作用域
# 區域性作用域
def f1():
def f2():
def f3():
print(x)
x = 2
f3()
f2()
f1()
2
2.3 注意點
# 作用域注意點
x = 1
def f1(): # 定義階段x=1
print(x)
def f2():
x = 2
f1()
f2()
1
2.4 函式物件+作用域應用
# 作用域應用
def f1():
def inner():
print('from inner')
return inner
f = f1() # 把區域性定義的函式放在全域性之中
def bar():
f()bar()
from inner
模擬測試 20190809
一次比一次差是要鬧哪樣啊,次次都看錯題什麼狀態啊,下次是不是就爆零了啊.可能是最近知識學得太快了吧,什麼都來不及深究就馬上考試or進入下乙個專題,做題也僅限於學長講過的 沒講過的直接死亡 某數字dp 集訓還有10天,不知不覺過去這麼長時間了,我承認最近確實有點浮躁,做題總是靜不下心 再這樣可能真的要...
2019 08 09 NOIP提高組 模擬 A 組
t1 這題其實很簡單。對於那些傳送門操作,我們設a b c d分別表示乙個位置到上下左右的最近乙個 的距離,那麼我們會發現其實這個點到這4個點的距離可以用min a,b,c,d 來替換。即a b c d可以用min a,b,c,d 來替換。這樣我們就可以預處理出每乙個點的a b c d,然後直接sp...
2019 08 09 onecode動歸專題1
c題 題意 已知乙個長度為n的字串 只包含小寫字母 求這個字串中回文子串行的個數 思路 區間dp,記 include using namespace std long long dp 1100 1100 ans const long long mod 1007 long long answer st...