Python 入門:基本語法

来源:https://www.cnblogs.com/f1194361820/archive/2018/03/22/8621319.html
-Advertisement-
Play Games

對於多數從其他編程語言轉入Python的來說,或多或少會有些不習慣。如果沿用其他編程語言的語法來寫Python代碼,那麼碰壁是不可避免的了。 本文是基於我看了兩個小時的官方文檔(Python 2.7 : https://docs.python.org/2/tutorial/index.html , ...


對於多數從其他編程語言轉入Python的來說,或多或少會有些不習慣。如果沿用其他編程語言的語法來寫Python代碼,那麼碰壁是不可避免的了。

本文是基於我看了兩個小時的官方文檔(Python 2.7 : https://docs.python.org/2/tutorial/index.html , 至於我學習Python2.x的原因:工作需要),

從中提取的重要的細節,以避免再次踩坑。

 

先上一個Python文件(Foo.py):

#!python
#-*- coding: utf-8 -*-

'''
python 的註釋:
    多行註釋: 用成對的3個單引號或者3個雙引號組成 (例如當前位置)
    單行註釋:使用#
'''

# 定義一個foo函數,用於把指定msg列印 count次
"""
    params:
        count: int, 列印的次數
        msg: string,消息內容
        useFor:多次列印時,是否採用for loop。
    raise:
        ValueError : 當count<0時拋出
"""
def foo(count=1, msg='Hello'+' '+ "Foo", useFor=1):
    if count < 0 :
        raise ValueError('count < 0')
    if useFor : # 0,1 可以用作bool判定
        print("print use for, count = " + bytes(count) +" :")
        for i in range(count):    # range(N),會生成一個從0到N的list,恰好可以用作索引
            print(msg+' '+bytes(i))
    else:
        print("print use while, count = " + bytes(count)+" :")
        i = 0
        while i < count:
            print(msg+" "+bytes(i))
            i+=1    # python中不支持 i++的寫法,支持 i+= 的寫法


if __name__ == '__main__' : 
    print('main in Foo.py')
    foo(2,useFor=1)
    foo(useFor=0, count=3);
    foo(-1)
    

 

 

1、文件頭

作為一個腳本語言,文件頭指定一些執行環境等,是很常見的事情。在shell中就很常見的。

那麼對於Python腳本,也有同樣的內容:

1.1 指定解釋器

腳本語言,很常見的配置:

#!/bin/sh           shell腳本
#!/usr/bin/perl     perl腳本
#!/usr/bin/python   python腳本
#!/usr/bin/python3  python3腳本
#!/usr/bin/python2  python2腳本

而有時不太清楚腳本解釋器的具體全路徑名;或者開發環境與運行環境的安裝路徑不同。為了保證相容性,也可以寫作:
#!/usr/bin/env python3
這樣運行時會自動搜索腳本解釋器的絕對路徑。

1.2 指定文件編碼

py文件的預設編碼是ASCII,上面的腳本中很多都是ASCII不支持的,那麼需要指定文件編碼。格式是:

#-*- coding: encoding -*-

 

2、註釋

 python 的註釋:

    多行註釋: 用成對的3個單引號或者3個雙引號組成 (例如當前位置)
    單行註釋:使用#

3、代碼塊,縮進

代碼塊:從上面的Foo.py文件中,很容易可以看出,代碼塊是以 冒號 : 開始的。不論是function定義,if,else,還是loop(for, while)

都是用 : 作為代碼塊的開始。不是用 { } 來包括代碼塊的。

縮進:Python的程式中,不是用 { } 來包括代碼塊的,用縮進來維持代碼塊的。不要寫 tab,用4個空格為縮進。

 

4、基本數據類型

4.1 String

Python中的字元串與JavaScript中的字元串一樣,既可以使用單引號,也可以使用雙引號。

不會像Shell那樣具備轉義。如果需要對字元轉義,使用 \ ,如果你不想要 字元串內部的 \ 代表轉義,那需要在第一個引號前加上 r 。例如:

#!python
#-*- coding: utf-8 -*-

'''
Python String,
1)表示字元串:用單引號或者雙引號。他們是等價的,不存在取值轉義等問題
2)字元串內的\表示轉義
3)如果不希望字元串內的\表示轉義,需要在字元串前加上 r 。
4)判定兩個字元串是否相等,類似於JavaScript,用 == 即可 
5)兩個字元串拼接,使用 + 即可
6)String 與 Number 拼接,不能直接使用 +
'''
def testString():
    a = 'aaa'
    b = "aaa"
    print(a==b)
    print(a==b)
    c = "\n"
    d = r"\n"
    print(c)
    print(d)
    print(c == d)


if __name__ == '__main__' : 
    print('current module name is "' + __name__+'"')
    testString()

 

4.2 Number

 

#!python
#-*- coding: utf-8 -*-

'''
Python String,
1)對於數字,Python與JavaScript仍然是類似的,沒有那麼多的限制
2)可以在數字上直接進行 + - * / 運算
3)String 與 Number 拼接,不能直接使用 +
'''
def testNumber():
    a = 1    # int 
    b = 1.0 # float
    c = 1.1
    print(a==b)
    print(b<c)
    print(a + (b - c * 3) / 2 )
    d = "1"
    print(a == d)
    print(bytes(1)+d)

 

4.3 Boolean

類似於JavaScript,Python的boolean也是多變的。

True, False 分別表示真、假

以下幾種情況是false:
1.None
2.False
3.任何類型的數字0,包括0,0.0,0L,0j
4.空的序列(sequence)或者映射(mapping)類型對象
5.對於用戶自定義類型的對象,如果其類定義了__nonzero__() 或者 __len__()特殊方法並且返回False或者0

對於最後一條規則,有幾點需要說明:
1.如果類沒有定義這兩個方法中的任何一個,則這種類型的對象真值測試時總是為True
2.如果類同時定義了__nonzero__() 和 __len__(),只會參考__nonzero__()的返回值

 

以下幾種情況是false:1.None2.False3.任何類型的數字0,包括0,0.0,0L,0j4.空的序列(sequence)或者映射(mapping)類型對象5.對於用戶自定義類型的對象,如果其類定義了__nonzero__() 或者 __len__()特殊方法並且返回False或者0
對於最後一條規則,有幾點需要說明:1.如果類沒有定義這兩個方法中的任何一個,則這種類型的對象真值測試時總是為True2.如果類同時定義了__nonzero__() 和 __len__(),只會參考__nonzero__()的返回值

 

def testBoolean():
    a = True
    b = False
    print(a!=b)
    if(3):
        print("3 is True")

if __name__ == '__main__' : 
    print('current module name is "' + __name__+'"')
    testBoolean()

 

5、 變數

Python中的變數,可以分為 local variable, global variable。

1)local variable 的作用與在一個代碼塊內部

2)global variable 的作用與在一個Python的module (一個 py文件) 內。它屬於模塊對象的。如果 A module 中定義了 一個global 變數 a, B module import 了 A, B仍然不能直接使用 A模塊的global 變數 a(例如不能 print a),而應該通過 A.a來使用。

聲明 global 變數需要使用 global 關鍵字,且有兩步,先聲明後賦值。

聲明local 變數,不需要額外的關鍵字。

#!python
#-*- coding: utf-8 -*-

'''
全局變數
'''
global moduleName
moduleName = __name__

a = 1
def printModuleName():
    print(a+1)
    print(__name__)
    print(moduleName)

'''
if __name__ == '__main__' : 
    print('current module name is "' + __name__+'"')
'''

printModuleName()
print(a)

 

6、異常捕獲與處理

Java中的try ... catch .. finally,在Python中也有類似的處理機制:try ... except ... else ... finally ...

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ssr:server side rendering(服務端渲染),目的是為瞭解決單頁面應用的 SEO 的問題,對於一般網站影響不大,但是對於論壇類,內容類網站來說是致命的,搜索引擎無法抓取頁面相關內容,也就是用戶搜不到此網站的相關信息。 一、關於nuxt 1、介紹:中文:https://zh.nux ...
  • 如果你是一個人在自學前端開發,或者是對前端開發有比較濃厚的興趣正想踏入前端領域,亦或者是已經在工作了,難免會遇到問題,與其一個人冥思苦想,抓耳撓腮,不如將問題拋出來,小伙伴們的見解會給你帶來新的收穫。當然也期待你可以貢獻自己的知識,幫助其他小伙伴,相信你不是一個人在前端的路上戰鬥,期待你的加入,大家 ...
  • 因為object沒有某個方法,但是別的對象有,可以藉助apply或call像別的對象借方法來操作。 貓吃魚,狗吃肉,奧特曼打小怪獸。 有天狗想吃魚了 貓.吃魚.call(狗,魚) 狗就吃到魚了 貓成精了,想打怪獸 奧特曼.打小怪獸.call(貓,小怪獸) call需要把參數按順序傳遞進去,而appl ...
  • Karma 官方介紹 A simple tool that allows you to execute JavaScript code in multiple real browsers. 即一個允許你在多個真實瀏覽器中執行js代碼的簡單工具。 使用了karma之後,我們之前為了Enzyme的mou ...
  • 從今天(2018-03-21)開始,我將淺談下設計模式,這個話題肯定很多人談過。由於我知識廣度和深度均有不足,如有不合理的地方請多多包涵。在此只希望能幫助更多同行的小白,藉此本人感覺很慰藉。當談完設計模式後,我將開源一個完全自己寫的DAL層,包括orm,連接池,線程,事務,MSIL,設計思路等。閑話 ...
  • 這裡只有乾巴巴的貨物 底層實現,我希望您理解記憶體地址,通多DeBug調試可以查看編譯器如何實現定址操作。可以幫助你理解為什麼是這樣的 ...
  • 《代碼大全2》第一、二、三章 隱喻思維在西方是一個熱門的話題,隱喻的認知功能在各個學科正受到越來越多的重視,依照我的理解,其實就是以眾所周知或者理解主體熟悉的事物為符號去將新事物、新概念具象化,與打比方的認知方式有同工異曲之妙。在《代碼大全2》第二章,作者Steve McConnell主要列舉了4種 ...
  • 讀了微軟 Azure 總結的雲計算設計模式系列文章,覺得很受啟發,遂將這個系列翻譯出來如下。 雲計算模型 這些設計模式對於在雲上構建高可用性,伸縮性,安全的應用程式很有用。 每個模式都描述了該模式試圖解決的問題,在使用該模式時應考慮的問題,以及一個基於微軟 Azure 雲的例子。大多數的模式中包含了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...