#######python########
python的基本
[root@desktop ~]# yum install python -y
[root@desktop ~]# python -V ##查看python版本
Python 2.7.5
[root@desktop ~]# python --version
Python 2.7.5
爲什麼用/usr/bin/python
關於python腳本中的第一行內容 :
#!/usr/bin/python 這種寫法表示直接引用系統的默認的 Python 版本,這樣的話python 程序移植到其他機器上可能運行的時候有問題,因爲別人系統默認的 Python版本與你預期的並不一致。
#!/usr/bin/env python 這種寫法表示,引用環境變量裏面自定義的Python 版本,具有較強的可移植性,推薦這種寫法。
##交互使用python
當在shell命令行輸入python命令會進入一個交互式的python編程環境
[root@desktop ~]# python
Python 2.7.5 (default, Feb 11 2014, 07:46:25)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a=1
>>> print a ##python沿襲了C語言的很多用法,輸出一字符串,使用print;
1
>>>##退出python的交互式環境通過快捷鍵ctrl+d或者使用exit()函數;
[root@desktop ~]# vim 1.py
#!/bin/env python
# coding:utf-8 ##指定編碼格式(四個任意一個都可以)
# coding=utf-8
# encoding:uft-8
# encoding=utf-8
#定義變量a,值爲1
a=1
print a
[root@desktop ~]# chmod +x 1.py ##加上執行權限
[root@desktop ~]# python 1.py
1
理解字符編碼
ASCII:美國人發明了計算機,用二進制存儲數據,英文字母加各個字符一共128個,每8位存儲一個字符,2^8=256,可通過 ord() 函數去查看字符對應的ASCII碼。
Unicode:但是ASCII碼忽略了中文,韓文,日文等其他國家的文字,這個時候256個字符的對應關係明顯是不夠用的,這時候就用兩個字節對應一個文字,2**16=65536.
UTF-8:英文字符明明可以通過一個字節存儲,Unicode卻需要2個字節來存儲,對於存儲比較小的計算機來說,是浪費很多不必要佔用的空間,這個時候就出現utf-8。那麼什麼是utf-8呢?簡單來說就是可變長度編碼格式,英文字符用ASCII碼來存,而中文呢,就用utf-8來存,這個時候中文就不是兩個字節存儲,而是三個字節來存。
ASCII:1字節=8位 2^8=256;
Unicode:2字節=16位,2^16=65536 a --> 2字節 中文 --> 2字節;
uft-8: a --> 1字節 中文 --> 3字節
GB2312: 2字節
[root@desktop ~]# python
Python 2.7.5 (default, Feb 11 2014, 07:46:25)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a='westos'
>>> type(a)
<type 'str'> ##類型:字符串
>>> b=u'westos' ##加上u類型會發生改變
>>> type(b) ##類型:unicode
<type 'unicode'>
內存讀取: Unicode(encode) ##不能一個字節三個字節跳換,不符合讀取規則
存在硬盤: utf-8(decode)
當存儲數據到硬盤,需要考慮到節省空間的問題,所以採用utf-8格式進行存儲;
當將數據讀入內存時,統一一個編碼格式便於操作,採用unicode編碼格式;
在給客戶看的時候,會有註釋,會出現英中文交匯,爲了方便操作,採用unicode編碼格式,在存儲數據到硬盤時候,爲了節約空間,採用utf-8進行存儲。
字符的編碼:將Unicode轉化成utf-8(字符串)
字符的解碼:針對uft-8而言,將utf-8轉換成Unicode
>>> name_unicode = u"高手"
>>> type (name_unicode)
<type 'unicode'>
>>> name_utf8 = name_unicode.encode('utf-8') ##字符的編碼(encode是把之前的unicode編碼爲utf-8)
>>> type(name_utf8)
<type 'str'>
>>> name_unicode1 = name_utf8.decode('utf-8') ##字符的解碼(decode是把之前的utf-8解碼爲unicode)
>>> type(name_unicode1)
<type 'unicode'>
>>>
# 定義一變量,編碼格式爲unicode
>>> name_unicode = u'粉條'
>>> type(name_unicode)
<type 'unicode'>
# 字符的編碼,從unicode到utf-8格式
>>> name_utf8 = name_unicode.encode('utf-8')
>>> type(name_utf8)
<type 'str'>
# 字符的解碼操作,從utf-8解碼到unicode編碼格式
>>> name_to_unicode = name_utf8.decode('utf-8')
>>> type(name_to_unicode)
<type 'unicode'>
ipython:對python在一定程度上進行了優化
python的解釋器:
cpython
安裝ipython。
pycharm安裝python編輯器
python與c的區別
腳本編寫C:
[root@desktop mnt]# vim 1.c
[root@desktop mnt]# chmod +x 1.c
[root@desktop mnt]# gcc 1.c -o 1.1.c
[root@desktop mnt]# ./1.1.c
hello!
[root@desktop mnt]# cat 1.c
#include <stdio.h>
void hello(){
printf("hello!");
}
void main(){
hello();
}
編寫python:
[root@desktop mnt]# vim 2.py
[root@desktop mnt]# chmod +x 2.py
[root@desktop mnt]# ./2.py
hello
wm
[root@desktop mnt]# cat 2.py
#!/usr/bin/env python
def hello():
print "hello"
def main():
hello()
print "wm"
main()
根據上面的兩個不同編程語言實現同一功能的分析,總結python編程初級要掌握的編程風格如下:
1)不要在行尾加分號;
2)每行不超過80個字符;
3)Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或者某種關鍵字。
4)增加縮進表示語句塊的開始,而減少縮進則表示語句塊的退出。縮進成爲了語法的一部分。
練習:
編寫簡單的python輸入x=10
若x大於0,輸出x是正數,同時輸出x-10
若x小於0,輸出x是負數,同時輸出x+10
否則,輸出x是0
#!/usr/bin/env python
#coding:utf-8
__author__ = "aely"##作者
'''##以下內容可以在設置裏面設置模板
@author:haoning##編寫者
@file:333.py##文件名
@contact:[email protected]##聯繫人
@time:6/25/171:42 PM##編寫時間
'''
x=10
if x>0:
print "x是正數"
b= x-10
print b
elif x<0:
print "x是負數"
c= x+10
print c
else:
print "x是0"
python註釋
單行註釋: # 常被用作單行註釋符號, # 開頭的行,其右邊的任何數據都會被忽略,當做是註釋。
塊註釋: 需要批量文本或代碼時,使用三引號 ''' ''' .,當然三引號也可以實現多行文本格式化打印。
在python裏面打開python Console
In[2]: print 1
1
In[3]: print "ha"
ha
In[4]: print "wq521"
wq521
In[5]: print 1>2
False
In[6]: print 19+13
32
In[7]: raw_input()
>? hello
Out[7]: 'hello'
In[8]: print raw_input
<built-in function raw_input>
In[9]: name = raw_input("NAME:")
NAME:>? haha
In[10]: print name
haha
In[11]: name = raw_input("Age")
Age>? 3
In[13]: print name
3
In[14]: age = raw_input("Age")
Age>? 3
In[15]: name = raw_input("NAME:")
NAME:>? haha
In[16]: type(age)
Out[16]: str
In[17]: age = input('Age')
Age>? 4
In[18]: type(age)
Out[18]: int
In[19]: print age>10
False
In[20]: print age=10
File "<ipython-input-20-87481056a110>", line 1
print age=10
^
SyntaxError: invalid syntax
In[21]: print age<10
True
練習(要求):
小練習: 編寫一程序,錄入信息包括 hostname、IP、used_year、CPU、Memory、manager_name ,如果使用年限超過10年,直接顯示警告信息“該服務器使用年限太久!”,如果使用年限不超過10年,顯示該服務器信息如下面的格式如下:
主機信息
主機名: hostname
IP:IP
使用年限:used_year
CPU:CPU
Memory:Memory
編程如下:
#!/usr/bin/env python
#coding:utf-8
__author__ = "aely"
'''
@author:haoning
@file:text.py
@contact:[email protected]
@time:6/25/173:10 PM
'''
hostname = raw_input("主機名:")
IP = raw_input('IP:')
user_year = input('user_year:')
CPU = raw_input('CPU:')
Memory = raw_input('Memory:')
manager_name = raw_input('manager_name:')
if user_year>10:
print("該服務器使用年限太久!")
exit()
else:
haha = '''
主機信息
主機名:%s
IP:%s
使用年限:%d
CPU:%s
Memory:%s
manager_name:%s
''' %(hostname,IP,user_year,CPU,Memory,manager_name)
print haha
測試:
/usr/bin/python2.7 /home/kiosk/PycharmProjects/1/text.py
主機名:hostname##交互式輸入
IP:172.25.254.39
user_year:6
CPU:i5
Memory:8G
manager_name:hao
主機信息##自動顯示
主機名:hostname
IP:172.25.254.39
使用年限:6
CPU:i5
Memory:8G
manager_name:hao
Process finished with exit code 0
python的垃圾回收機制
1)Python在內存中存儲了每個對象的引用計數(reference count)。如果計數值變成0,那麼相應的對象就會消失,分配給該對象的內存就會釋放出來用作他用。
2)PyObject是每個對象必有的內容,其中ob_refcnt就是做爲引用計數。當一個對象有新的引用時,它的ob_refcnt就會增加,當引用它的對象被刪除,它的ob_refcnt就會減少.引用計數爲0時,該對象生命就結束了
變量命名方式:下劃線/數字/字母/(不能以數字開頭)
>>> a=1
>>> print a
1
>>> a_1 = 111
>>> _a = 222
>>> print _a
222
>>> 1a = 111
File "<stdin>", line 1
1a = 111
^
SyntaxError: invalid syntax //指語法錯誤,無效的語法
>>> a = 5
>>> b = 3>>> print a + b
8
>>> print a + b +c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined //名稱錯誤
運算符與表達式
賦值運算符:=, +=, -=, /=, *=, %=
>>> a=1
>>> print a
1
算術運算符:+, -, , /, //, %, *
>>> 1 + 1
2
>>> 1 - 1
0
>>> 1 * 3
3
>>> 1 / 2##整型的都爲整型
0
>>> 1.0 / 2##存在浮點型的,運算結果會出現浮點
0.5
>>> 1.0 // 2
0.0
>>> 1 % 2
1
>>> 2 ** 3
8
>>> a33 = 3 ** 3
>>> print a33
27
>>> print "a33=",a33
a33= 27
關係運算符: >, >=, <, <=, !=, ==
布爾值:1 < 2,返回一個布爾類型的結果
>>> 1 < 2
True
>>> 1 > 2
False
邏輯運算符:邏輯與and, 邏輯或or, 邏輯非not
1本身代表True
2本身代表False
練習:
編寫一個四則表達式:
#!/usr/bin/env python
#coding:utf-8
from __future__ import division##引入一個模塊,使得整數除法也能輸出準確的數字
__author__ = "aely"
'''
@author:haoning
@file:yunsuan.py
@contact:[email protected]
@time:6/25/173:50 PM
'''
number1 = input("num1=")
operate = raw_input("operate=")
number2 = input("num2=")
if operate == "+":
print number1 + number2
elif operate == "-":
print number1 - number2
elif operate == "*":
print number1 * number2
elif operate == "/":
print number1 / number2
else :
print "請重新其他輸入簡單的運算符+,-,*,/"
測試:
a.運算符的測試
/usr/bin/python2.7 /home/kiosk/PycharmProjects/1/yunsuan.py
num1=5
operate=**
num2=7
請重新其他輸入簡單的運算符+,-,*,/
Process finished with exit code 0
b.加了模塊後除法的精確運算
[kiosk@foundation39 1]$ python yunsuan.py
num1=5
operate=/
num2=3
1.66666666667
In [1]: num = 1L##強制把1定義爲長整型
In [2]: type(num)
Out[2]: long
In [3]: a='''##'''格式化輸出
...: jaja
...: xixi
...: wq
...: 123
...: '''
In [4]: print a
jaja
xixi
wq
123
In [5]: a='hello westos'
In [6]: a[0]##查詢a字符串的第0個字母
Out[6]: 'h'
In [7]: a[0:4:2]##從0開始到4結束,步長爲2
Out[7]: 'hl'
In [8]: a[-4:-1:2]##-4即從最後開始數,最後一位是-1
Out[8]: 'so'
In [9]: a[-4:-1:1]
Out[9]: 'sto'
In [10]: b='aqqehw'
In [11]: b[5]+b[2]+b[0]##b的第5第2第0位相取
Out[11]: 'wqa'
In [12]: t='123','qwe','sa'##如果用,隔開那麼取整塊
In [13]: t[1]
Out[13]: 'qwe'