1. 程式人生 > >跟我一起學python(三),python基本資料型別和函式

跟我一起學python(三),python基本資料型別和函式

三元運算:

三元運算(三目運算),是對簡單的條件語句的縮寫。

# 書寫格式

result = 值1 if 條件 else2

# 如果條件成立,那麼將 “值1” 賦值給result變數,否則,將“值2”賦值給result變數

if a == 1:
    name = "walker"
else:
    name="wang"

name = "walker" if a == 1 else "wang"   #一句話相當於上面的if else的意思

lambda表示式:

def f1(a1)
    return a1 +100

f1 = lambda a1:a1+100   #相當於上面的個函式,也可以加兩個函式,但需要用逗號隔開

函式:

1 def關鍵字,建立函式
2 函式名
3 ()
4 函式體
5 返回值

需要注意的是:
函式體是不被執行的,但會把函式體放入記憶體.只有在呼叫的時候才執行
寫函式要先定義再呼叫
在函式中,一但執行了return,函式執行過程立即終止

函式傳遞引數的5種方式:
1 普通引數 (嚴格豔照順序,將實際引數賦值給形式引數) 需要11對應

def func(a)
    print(a)

#在呼叫的時候就要必須傳引數進入函式,否則會報錯
func("walker")
#或者
func(a="walker"

2 預設引數 (預設引數必須放置在引數列表的最後) 設定預設值

def func(a="walker",b="wang")
    print(a,b)
#如果不傳入引數到函式的話,函式將會採用預設引數賦值給a,也可以傳入引數
func("wang","walker")
#或者
func(a="wang",b="walker"

3 指定引數 (將實際引數副職給指定的形式引數)

4 *變數 (可以傳遞無數個引數,傳遞完的引數被存為元組的形式)

def f1 (*args):                 #args是變數
    print (args,type(args))     #args的型別是元組
如果將列表傳入的話,*列表的話,就將列表的每一個元素轉換成元組在函式裡.如果不加*就是將整個列表轉換成元組的一個元素.
帶*相當於一個for
迴圈,將str或者元素裡的每一個值都傳至函式裡.

5**變數 (可以傳遞無數個引數,傳遞完的引數被存為字典的形式)

傳指定引數的時候(變數=vaule),在函式接收後,會將傳入的引數轉換成dict的格式.key=變數名,vaule=vaule
a=f1(n=1,m=2)
如果加2*傳入函式(a=f1(**dic1))就會把字典的每一個元素都付給函式,函式接收引數後,會按照原字典的形式拼裝

6 萬能引數 可以自動轉換成,元組和字典.注意:在前面,*在後面

def f1=(*args,**kwargs) #一般都寫成args,kargs 規範!
    print (args)
    print (kwargs)

f1(11,22,33,44,k1="v1,k2="v2")  可以自動識別元組型別或者是key,value型別

7 補充

a. def f1
   def f1 會用後面的引數
b.傳遞引數的時候是一個引用
c.全域性變數和區域性變數

內建函式:

abs() #取絕對值

bool() #取布林值 False的有(除了False))0,None,”“,[],{},()

all() #給all傳引數,如果所有元素都為真就是真,有一個假久為假

n=all([1,2,3,4])    #print(n)的時候為Ture
    n=all([1,2,3,0])    #print(n)的時候為False

any() #給any傳引數,任意一個為真就為真(具體參考all函式)

ascii() #自動執行物件的repr方法

bin() #接收10進位制,轉換成2進位制 (0b表示2進位制的意思)

oct() #接收10進位制,轉換層8進位制 (0o表示8進位制的意思)

hex() #接收10進位制,轉換層16進位制 (0x表示16進位制的意思)

int() #將字串數字,轉換成10進位制

bytes() #把字串可以轉換成位元組型別,想把一個字串轉換成一個位元組。

bytes(s,encoding="utf-8")

bytearray() #把btye的那種位元組轉換成列表

str() #把位元組轉換成字串

str(字串,encoding="utf-8")

callable() #檢測是否可以被執行 用處不大

chr() #ascii碼對應關係

print(chr(65))

ord() #跟chr相反,將字元轉換成ascii碼

print(chr(“A”))

compile() #把字串編譯成程式碼

s="print(123)"
    r=compile(s,"<string>","exec")      #"<string>"可以被"檔名"替換

exec() #執行compile()編譯完的程式碼 比eval更牛逼,但是exec沒有返回值

exec(r)

eval() #eval函式可以計算Python表示式,並返回結果(exec不返回結果,

print(eval("…"))#列印None
#正確如下:
ret=eval("7+8+9")
print(ret)

dir() #快速獲取模組、類獲取哪些功能

print(dir(dict))

help() #相當於man文件,相當於按住ctrl滑鼠左鍵顯示的原始碼

help(dict)

divmod() #取餘數

r=divmod(97,10)
print r #r[0]是商 r[1]是餘數
n1,n2=divmod(97,10)     #可以將商和餘數分別賦值給n1,n2

enumerate() #用於遍歷序列中的元素以及它們的下標 字典、列表、元組都可以

for i,j in enumerate(('a','b','c')):
    print i,j
#以下為顯示:
    0 a
    1 b
    2 c

isinstance() #判斷物件是誰的例項

s="alex"
isinstance(s,str)

filter() #(函式,可迭代的物件)

li=[11,22,33,44,55]
def f2(a):          #f2=lambda a:a>22
    if a>22:
    return True
ret=filter(f2,li)   

#ret=filter(lambda a:a>22,li)   用lamba表示式       
#filter內部會迴圈第二個引數,在每一次迴圈的內部再執行第一個引數(把第二個引數傳入第一個函式變數中)

print(list(li))

map()#(函式,可迭代的物件),將第二個引數傳入第一個函式,函式進行計算

result=map(lambda a:a+100,li)
print (list(result))

frozenset() #不可變集合

globals() #可以打印出所有的全域性變數

locals() #可以打印出所有的區域性變數

hash() #生成雜湊值

iter() #建立迭代器

len() #檢視長度 python3裡按照字元,python2按照位元組

#如果要看位元組長度   需要用bytes()

max() #列出最大

min() #列出最小

sum() #列出求和

memoryview() #檢視記憶體地址的

object() #所有類的父類

pow() #pow(2,10) 相當於2**10

range() #範圍

reverse() #反轉 reverse(li) == li.reverse()

round() #四捨五入

set() #集合

slice() #切片

sorted() #排序 sorted(li) == li.sorted()

vars() #當前模組都有哪些變數

zip() #負責將多個元素的相同角標內的內容,整理到一個元祖中。

join() #負責將同元組或者列表內的元素拼接起來 (“”.join(元祖或列表))

#注意,join拼接的只能是字串,如果是int會報錯
a=["walker","wang"]
print ("".join(a))

這裡寫圖片描述

更詳細的官方資料:猛戳這裡

open函式:open()

開啟檔案:

f=open("db","a")    #如果open開啟檔案亂碼了就增加encoding引數傳入到open函式
    r:只讀
    w:只寫,每次都會把檔案清空
    x:如果當這個檔案存在的時候就報錯,不存在的話就建立並寫內容
    a:追加
    rb:開啟方式如果加了b(rb,wb,xb,ab) python不處理轉換,讀取的時候是位元組型別,寫入也是以位元組型別寫入 (常用於誇平臺操作)
    r+:+號可以即可讀又可寫(日後推薦使用) (可以+b) 如果開啟模式無b 則read是按照字元讀取。受影響的read(1)

操作檔案:
f.seek() #調整指標的位置 按照位元組
f.tell() #獲取當前指標的位置 按照位元組 推薦使用時:f.seek(f.tell())
f.read() #預設無引數讀全部,如果有引數按照開啟方式(有b按照位元組,無b按照字元)
f.write() #寫入檔案
f.close() #關閉檔案
f.fileno() #檔案描述符,檔案的數字形式
f.flush() #將f.write()後但沒有close()的緩衝區內容寫入到檔案
f.deadable()#檢視檔案是否可讀 返回True 和 False
f.readline()#只讀取一行
f.truncate()#截斷檔案,根據指標位置

for line in f:  #迴圈每一行
    print line

關閉檔案:
f.close()

replace函式()
user.replace(“old”,”new”,[max])
old – 將被替換的子字串。
new – 新字串,用於替換old子字串。
max – 可選字串, 替換不超過 max 次

#舉例:
str = "this is string example....wow!!! this is really string";
print str.replace("is", "was");
print str.replace("is", "was", 3);

字串格式化:
字串格式化分為:百分號方式、format方式

百分號方式:%[(name)][flags][width].[precision]typecode
(name) 可選,用於選擇指定的key

flags 可選,可供選擇的值有:
+ 右對齊;正數前加正好,負數前加負號;
- 左對齊;正數前無符號,負數前加負號;
空格 右對齊;正數前加空格,負數前加負號;
0 右對齊;正數前無符號,負數前加負號;用0填充空白處

width 可選,佔有寬度

.precision 可選,小數點後保留的位數

typecode 型別模式,此項為必選 例如(%s %d)

%s, 獲取傳入物件的__str__方法的返回值,並將其格式化到指定位置
%r, 獲取傳入物件的__repr__方法的返回值,並將其格式化到指定位置
%c, 整數:將數字轉換成其unicode對應的值,10進位制範圍為 0 <= i <= 1114111(py27則只支援0-255);字元:將字元新增到指定位置
%o, 將整數轉換成 八  進製表示,並將其格式化到指定位置
%x, 將整數轉換成十六進位制表示,並將其格式化到指定位置
%d, 將整數、浮點數轉換成 十 進製表示,並將其格式化到指定位置
%e, 將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(小寫e)
%E, 將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E)
%f, 將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(預設保留小數點後6位)
%F, 同上
%g, 自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是e;)
%G, 自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是E;)
%%, 當字串中存在格式化標誌時,需要用 %%表示一個百分號

注:Python中百分號格式化是不存在自動將整數轉換成二進位制表示的方式

常用格式化(%s):

tpl = "i am %s" % "walker"
tpl = "i am %s age %d" % ("walker", 18)
tpl = "i am %(name)s age %(age)d" % {"name": "walker", "age": 18}
tpl = "percent %.2f" % 99.97623
tpl = "i am %(pp).2f" % {"pp": 123.425556, }
tpl = "i am %.2f %%" % {"pp": 123.425556, }

format方式: [[fill]align][sign][#][0][width][,][.precision][type]

:               【可選】格式化選項   

fill            【可選】空白處填充的字元

align           【可選】對齊方式(需配合width使用)
        <,      內容左對齊
        >,      內容右對齊(預設)
        =,  內容右對齊,將符號放置在填充字元的左側,且只對數字型別有效。 即使:符號+填充物+數字
        ^,      內容居中

sign            【可選】有無符號數字
#               【可選】對於二進位制、八進位制、十六進位制,如果加上#,會顯示 0b/0o/0x,否則不顯示

,               【可選】為數字新增分隔符,如:1,000,000

width            【可選】格式化位所佔寬度

.precision       【可選】小數位保留精度

type             【可選】格式化型別  (用冒號)
    傳入” 字串型別 “的引數
        s,格式化字串型別資料
        空白,未指定型別,則預設是None,同s
    傳入“ 整數型別 ”的引數
        b,將10進位制整數自動轉換成2進製表示然後格式化
        c,將10進位制整數自動轉換為其對應的unicode字元
        d,十進位制整數
        o,將10進位制整數自動轉換成8進製表示然後格式化;
        x,將10進位制整數自動轉換成16進製表示然後格式化(小寫x)
        X,將10進位制整數自動轉換成16進製表示然後格式化(大寫X)
    傳入“ 浮點型或小數型別 ”的引數
        e, 轉換為科學計數法(小寫e)表示,然後格式化;
        E, 轉換為科學計數法(大寫E)表示,然後格式化;
        f , 轉換為浮點型(預設小數點後保留6位)表示,然後格式化;
        F, 轉換為浮點型(預設小數點後保留6位)表示,然後格式化;
        g, 自動在e和f中切換
        G, 自動在E和F中切換
        %,顯示百分比(預設顯示小數點後6位)

常用格式化(format):

#最基本的
tpl = "i am {}, age {}, {}".format("seven", 18, 'alex') 

#用*將列表傳進來,如果傳字典用**      
tpl = "i am {}, age {}, {}".format(*["seven", 18, 'alex'])  

tpl = "i am {0}, age {1}, really {0}".format("seven", 18)       
tpl = "i am {0}, age {1}, really {0}".format(*["seven", 18])
tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
tpl = "i am {name}, age {age}, really {name}".format(**{"name": "seven", "age": 18})
tpl = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
tpl = "i am {:s}, age {:d}, money {:f}".format("seven", 18, 88888.1)
tpl = "i am {:s}, age {:d}".format(*["seven", 18])
tpl = "i am {name:s}, age {age:d}".format(name="seven", age=18)
tpl = "i am {name:s}, age {age:d}".format(**{"name": "seven", "age": 18})
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
tpl = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
tpl = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
tpl = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)

生成6位隨機碼:(驗證碼):

import random
li=[]
for i in range(6):
    r=random.random.randrange(0,5)  # 取0到4隨機數
    if r==2 or r==4:
        tmp= random.randrange(0,9)
        li.append(chr(tmp))
    else:
        tmp= random.randrange(65,91)
        c=chr(tmp)
        li.append(c)
result="".join(li)
print(result)

裝飾器:

裝飾器: @ + 函式名 例如(@outer)
1.會自動執行outer函式,並且將其下面的函式名f1當作引數傳遞

2.將outer函式的返回值,重新賦值給函式(原有的函式的記憶體地址會被覆蓋)
下面的例子說明 f1 函式被inder取代

def outer(func)
    def inter(*args,**kwargs):  #先輸出新函式,再輸出原函式,在原函式不變的基礎上再執行新函式
    pass    
        r=func(*args,**kwargs)          #func() 其實是執行老的f1函式
        return r            #可以將原函式的返回值返回
    return inder    #不能加括號,加括號相當於返回 inder函式的返回值也就是None

@outer
def f1()
    pass

雙層裝飾器

    @xx2
    @xx1
    def xx0 #編譯是從下到上,但執行是從上到下。! 其實記住從上到下執行就行了。

生成器:
函式裡面有yield 呼叫時候通過for迴圈取

def func()
    print(111)  #第一次執行的時候會print 111 然後yield 1
    yield 1
    print(222)  #第二次執行的時候會print 111 然後yield 1
    yield 2
    print(333)  #第三次執行的時候會print 111 然後yield 1
    yiele 3
ret = func()
r=ret._next_() #進入函式找到yield 獲取yield後面的資料 , 每一個yield相當於一個停頓
print(r)

迭代器:
相當於for迴圈在python中. for迴圈封裝了迭代器. 迭代器相當於用next功能去取,用for迴圈取到最後一個不會報錯.

遞迴:
一個函式呼叫另外一個函式

def func(n)
    n+=1
    if n >=4:
        return "end"
    return func(n)

遞迴階乘

def func(num)
    if num == 1:
        return 1
    return num * func(num)
x=fun(7)    #實際上就是1*2*3*4*5*6*7的值

補充上一篇文章忘了提的–集合:
集合 set 無序、不重複的序列
建立集合:
s=set()

s1={123,456}
s2=set() 建立一個空集合
s3=set([11,22,33,4])

s.add 增加元素

s.clear 清除所有內容

s3=s1.difference(s2) #s1的差集 並賦值給s3
s1.symmetric_update(s2) #S1的差集並覆蓋掉s1
s3=s1.symmetric_difference(s2)      #s1和s2對稱差集,並賦值給s3
s1.symmetric_difference_update(s2)  #s1和s2對稱差集,並覆蓋掉s1

s1.discard 移除集合中的元素,不存在不報錯

s1.remove 移除集合中的元素,不存在會報錯

s1.pop() 隨機移除集合中的某個元素 不推薦.(pop裡無引數)

ret = s1.pop()  #ret接收pop移除的元素
s3=s1.intersection(s2) s1和s2的交集 並賦值給s3
    s1.intersection_update(s2)  s1和s2的交集 並覆蓋掉s1
s3=s1.union(s2) s1和s2的並集 並賦值給s3
s1.update(列表\元組\字串) 可以被迭代的物件,可以被FOR迴圈的物件
    可以將列表內新增的值迴圈加入set內
        但如果是字串將會被拆分
issubset    子序列
issuperset  父序列
    例如: s1={11,22,33}
            s2={22,33}
    那麼s2的{22,33}就是s1的子序列,同理反之父序列

補充一下集合的概念:

集合:A{1234} B{2345}
交集:AB共有的部分     {2345}
並集:屬於A或者屬於B{12345}
差集:只屬於A但不屬於B,叫做A的差集{5}
全集:AB的所有元素集合    {12342345}
對稱差集:只屬於A但不屬於B,只屬於B但不屬於A {15}
補集:術語全集AB但不屬於A的叫做A的補集{5}

雙下劃線的預設方法(python自動呼叫)

li=[11,22,33]   #list_init_
li()            #list_call_
li[0]           #list_getitem_
li[0]=123       #list_setitem_
def li [1]      #list_delitem_

try/finally
舉例:

try:
    <語句>
finally:
    <語句> #退出try時總會執行

try語句子句形式表

except: 捕獲所有異常
except name: 只捕獲特定的異常
except name,value: 捕獲異常和它的附加資料(將異常的資訊儲存到value,)
except (name1,name2): 捕獲任何列出的異常
else: 如果沒有異常
finally: 總是執行

在shell中給print語句加顏色 31是紅色字型,32是綠色字型 41是背景紅色
\033[31;1m”文字”]\033[0m
1表示加深,
3開頭表示字型顏色,
4開頭表示背景顏色。兩種顏色都設定,用分號隔開

print (\033[1;32;41m"文字"\033[0m)
1  加深
5  閃爍
31 紅色
32 綠色
33 黃色
34 深藍色
35 紫色
36 藍色
37 灰色

相關推薦

一起pythonpython基本資料型別函式

三元運算: 三元運算(三目運算),是對簡單的條件語句的縮寫。 # 書寫格式 result = 值1 if 條件 else 值2 # 如果條件成立,那麼將 “值1” 賦值給result變數,否則,將“值2”賦值給result變數 if a == 1:

一起Hadoop:Hadoop叢集的最簡化部署

在和我一起學Hadoop(二):Hadoop的原始碼構建章節中我們構建了適合本地Linux的hadoop-xxx.tar.gz的安裝包。 解壓到安裝目錄 配置如下 環境變數配置 /etc/profile export HADOOP_CONF_DIR=

我們一起ABAP 02~基礎語法與資料型別輸出到螢幕

1、ABAP(ABAP/4)的基本語法 基本資料型別及屬性:  DECIMALS  可以在資料型別後製定小數位的個數。 1.1、規則和幾點建議:     a. 我們常犯的低階錯誤~  語法切換(中

Java入門6——集合、基本資料型別引用資料型別的相互轉換

集合:   1.HashMap ---->  類     概述: 通過key可以找到value, key就是鍵, values就是值. 俗稱鍵值對.     特點: 無序的    值可以重複  鍵不可以重複的  如果重複了 ,值就會覆蓋       回顧:      

一起pythonpython基本資料型別

運算子 1、算數運算 2、比較運算 3、賦值運算 4、邏輯運算 5、成員運算 基本資料型別 1、數字 int(整型) 在32位機器上,整數的位數為32位,取值範圍為-2**31~2**31-1,即-2147483648

一起pythonpython的模組

模組,用一砣程式碼實現了某個功能的程式碼集合。 類似於函數語言程式設計和麵向過程程式設計,函數語言程式設計則完成一個功能,其他程式碼用來呼叫即可,提供了程式碼的重用性和程式碼間的耦合。而對於一個複雜的功能來,可能需要多個函式才能完成(函式又可以在不同的.py

一起pythonpython基礎

Python簡介 python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。 最新的TIOBE排行榜,Python趕

著文檔Vue——組件基礎

ont err -s fontsize itl IE alert -i -a <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <me

人生苦短Python—通過Python實現網路裝置指定指標的收集與指標的圖形化展示

寫在前面: 博主自2018年8月底開始,堅持每週更新一篇技術類部落格,含本篇文章在內,目前已經更新了八篇文章。除十一假期外,堅持每週更新。希望自己能堅持下去。 目前已經開啟了三個系列的文章,分別是: 《人生苦短,我用Python》——已釋出三篇文章 《那些你應該知道的

一起Netty之 SimpleChannelInboundHandler

 其實Netty的知識點還是很零碎的,比如這個SimpleChannelInboundHandler這個類,在《Netty in Action》該書中的原版的Hello world的demo的客戶端就是使用的SimpleChannelInboundHandler來作為處理

一起寫 Makefile

三、make是如何工作的 在預設的方式下,也就是我們只輸入make命令。那麼,     1、make會在當前目錄下找名字叫“Makefile”或“makefile”的檔案。    2、如果找到,它會找檔案中的第一個目標檔案(target),在上面

一起寫 Makefile

六、多目標 Makefile的規則中的目標可以不止一個,其支援多目標,有可能我們的多個目標同時依賴於一個檔案,並且其生成的命令大體類似。於是我們就能把其合併起來。當然,多個目標的生成規則的執行命令是同一個,這可能會可我們帶來麻煩,不過好在我們的可以使用一個自動化變數“[email protecte

一起寫 Makefile

書寫命令———— 每條規則中的命令和作業系統Shell的命令列是一致的。make會一按順序一條一條的執行命令,每條命令的開頭必須以[Tab]鍵開頭,除非,命令是緊跟在依賴規則後面的分號後的。在命令列之間中的空格或是空行會被忽略,但是如果該空格或空行是以Tab鍵開頭的,那麼make會認為其是一個空命令。 我

一起寫 Makefile

書寫規則———— 規則包含兩個部分,一個是依賴關係,一個是生成目標的方法。 在Makefile中,規則的順序是很重要的,因為,Makefile中只應該有一個最終目標,其它的目標都是被這個目標所連帶出來的,所以一定要讓make知道你的最終目標是什麼。一般來說,定義在Makefile中的目標可能會有很多,但是

一起寫 Makefile十三

五、定義模式規則 你可以使用模式規則來定義一個隱含規則。一個模式規則就好像一個一般的規則,只是在規則中,目標的定義需要有"%"字元。"%"的意思是表示一個或多個任意字元。在依賴目標中同樣可以使用"%",只是依賴目標中的"%"的取值,取決於其目標。 有一點需要注意的是,"%"的展開發生在變數和函式的展開之後

一起寫 Makefile

四、foreach 函式   foreach函式和別的函式非常的不一樣。因為這個函式是用來做迴圈用的,Makefile中的foreach函式幾乎是仿照於Unix標準Shell(/bin/sh)中的for語句,或是C-Shell(/bin/csh)中的foreach語句而構建的。它的語法是: &

一起寫 Makefile

使用函式———— 在Makefile中可以使用函式來處理變數,從而讓我們的命令或是規則更為的靈活和具有智慧。make所支援的函式也不算很多,不過已經足夠我們的操作了。函式呼叫後,函式的返回值可以當做變數來使用。 一、函式的呼叫語法 函式呼叫,很像變數的使用,也是以“$”來標識的,其語法如下: &nbs

一起寫Makefile10--- 變數巢狀變數+追加變數+overrid+多行變數+環境變數+目標變數+模式變數

使用變數 ———— 在Makefile中的定義的變數,就像是C/C++語言中的巨集一樣,他代表了一個文字字串,在Makefile中執行的時候其會自動原模原樣地展開在所使用的地方。其與C/C++所不同的是,你可以在Makefile中改變其值。在Makefile中,變數可以

一起寫Makefile13--- make的執行make的退出碼+指定Makefile+制定目標+檢查規則+make的引數

make 的執行 —————— 一般來說,最簡單的就是直接在命令列下輸入make命令,make命令會找當前目錄的makefile來執行,一切都是自動的。但也有時你也許只想讓make重編譯某些檔案,而不是整個工程,而又有的時候你有幾套編譯規則,你想在不同的時候使用不同的編

一起寫Makefile7--- 環境變數MAKEFILES+make的工作方式

四、環境變數 MAKEFILES 如果你的當前環境中定義了環境變數MAKEFILES,那麼,make會把這個變數中的值做一個類似於include的動作。這個變數中的值是其它的Makefile,用空格分隔。只是,它和include不同的是,從這個環境變中引入的Makefi