基於編程人員Python學習第一章節

来源:https://www.cnblogs.com/aikenwu/archive/2018/08/13/9471570.html
-Advertisement-
Play Games

基於廖雪峰的python零基礎學習後,自我總結。適用於有一定基礎的編程人員,對我而言,則是基於.net已有方面,通過學習,記錄自我覺得有用的地方,便於後續回顧。 主要以快速定位內容,通過直觀代碼輸入輸出結果,展示獨有的特性,更直觀表現,而不拘禁於理論描述。待以後使用中遇到坑,再來詳細闡述。 本章包含 ...


基於廖雪峰的python零基礎學習後,自我總結。適用於有一定基礎的編程人員,對我而言,則是基於.net已有方面,通過學習,記錄自我覺得有用的地方,便於後續回顧。

主要以快速定位內容,通過直觀代碼輸入輸出結果,展示獨有的特性,更直觀表現,而不拘禁於理論描述。待以後使用中遇到坑,再來詳細闡述。

本章包含,Python基礎、函數、高級特性、函數式編程、模塊

一、Python基礎

  Python程式大小寫敏感,個人使用sublime編寫程式,註意規範使用tab縮進或者空格,否則程式運行會報unexpected error

  字元串轉義:用r''表示''內部的字元串預設不轉義   

>>> print(r'\\\t\\')
\\\t\\

        用'''...'''的格式表示多行內容

>>> print('''line1
... line2
... line3''')
line1
line2
line3

        Encode & Decode

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
''

      長度:len(str)

      格式化: %s 字元串; %d 整數; %f 浮點數;%x 十六進位整數;%%=>%

>>> print('%2d-%02d' % (3, 1))
 3-01
>>> print('%.2f' % 3.1415926)
3.14、

  布爾值:True,False

  空值:None 

  集合list  和 元組 tuple

classmates = ['Michael', 'Bob', 'Tracy']    集合list  append 添加,pop 刪除
classmates = ('Michael', 'Bob', 'Tracy')
>>> classmates[-3]
'Michael'

#只有一個元素tuple 定義加上逗號 ,
>>> t = (1,)
>>> t
(1,)
#“可變的”tuple 內部list改變,實際指向list位置未變
>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
 

  條件判斷

age = 20
if age >= 6:
    print('teenager')
elif age >= 18:
    print('adult')
else:
    print('kid')

  dic 字典 和 set

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
#設定預設值
>>> d.get('Thomas', -1) -1
#刪除
>>> d.pop('Bob') 75
#重覆元素在set中自動被過濾:  add(key)  remove(key)
>>> s = set([1, 2, 3]) >>> s {1, 2, 3}

二、函數

  函數定義

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x
#返回多個值 return a,b,c

  函數參數

#預設參數必須指向不變對象!
def
add_end(L=None): if L is None: L = [] L.append('END') return L
# *args 可變參數 **關鍵字參數
def
f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
>>> f1(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
# *,d 命名關鍵字參數
def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
>>> f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {'ext': None}
#對於任意函數,都可以通過類似func(*args, **kw)的形式調用它,無論它的參數是如何定義的

三、高級特性

  切片 substring

>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
>>> L[1:3]  # L[1] L[2]
['Sarah', 'Tracy']
>>> L = list(range(100))
>>> L[-10:]  # L[-10:100] 後10個
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> L[:10:2]  # L[0:10:2] 前10個數,每兩個取一個
[0, 2, 4, 6, 8]
>>> L[:]  # L[0:100:1] copy 複製
[0, 1, 2, 3, ..., 99]

 >>> L[::-1]  #相當於 L[-1:-101:-1]  if s<0 then L[-1:-len(L)-1:-1]
 [99, 98, 97, ..., 0]

  迭代 for

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數是否可迭代
False
>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C

  列表生成式

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

  生成器 yield

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
# 使用next(g) or for n in g 可迭代對象g #斐波拉契數
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return 'done'

  迭代器

>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False

#Iterable。 for 迴圈迭代
#Iterator。 next 迭代器
# Iterable 轉換 Iterator
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

四、函數式編程 

  高階函數 map/reduce/filter/sorted

#map 傳入函數依次作用到序列每個元素,返回Iterator結果集
>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
# r 為Iterator惰性序列,list() 是整個序列返回

#reduce  reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

#map reduce 結合使用
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def char2num(s):
    return DIGITS[s]
def str2int(s):
    return reduce(lambda x, y: x * 10 + y, map(char2num, s))
#filter filter()把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄
def not_empty(s):
    return s and s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
# 結果: ['A', 'B', 'C']
#sorted sorted()函數對list進行排序
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

  函數返回值 和 閉包

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return sum
>>> f = lazy_sum(1, 3, 5, 7, 9)
>>> f
<function lazy_sum.<locals>.sum at 0x101c6ed90>
>>> f()
25
#典型閉包錯誤
def count():
    fs = []
    for i in range(1, 4):
        def f():
             return i*i
        fs.append(f)
    return fs

f1, f2, f3 = count()

>>> f1()
9
>>> f2()
9
>> f3()
9
##返回閉包時牢記一點:返回函數不要引用任何迴圈變數,或者後續會發生變化的變數

修改後:
def count():
    def f(j):
        def g():
            return j*j
        return g
    fs = []
    for i in range(1, 4):
        fs.append(f(i)) # f(i)立刻被執行,因此i的當前值被傳入f()
    return fs

  匿名函數 lambda

>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
#lambda 不包含return,返回即使return結果

  裝飾器

import functools

def log(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

@log('execute')
def now():
    print('2018-8-13')

>>> now()
execute now():
2018-8-13

  偏函數

>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
#相當於下麵這樣調用
kw = { 'base': 2 }
int('10010', **kw)

五、模塊

  


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

-Advertisement-
Play Games
更多相關文章
  • You can do this using a JLabel, but an alternative would be to style a JButton. That way, you don't have to worry about accessibility and can just fir ...
  • String examplejsPrefix = "example"; String examplejsSuffix = "js"; String examplejs = examplejsPrefix + "." + examplejsSuffix; try { // save it as a t ...
  • 在程式運行時,發生了期望之外的情況,它阻止了程式按照程式員的預期正常執行,這就是異常。 對於異常,Java提供了優秀的解決辦法:異常處理機制。常處理機制能讓程式在異常發生時,按照代碼的預先設定的異常處理邏輯,針對性地處理異常,讓程式盡最大可能恢復正常並繼續執行,且保持代碼的清晰。 Java中的異常可 ...
  • Mac Book Pro 10.13.6Jaspersoft Studio community version 6.6.9JDK 8 安裝 Jaspersoft Studio Jasper Report 分為專業版(收費)和社區版(免費),如果只是用來設計一些 基本的報表模板,社區版就足夠了。從這裡 ...
  • 前言 本文主要介紹SpringBoot的一些打包事項和項目部署以及在其中遇到一些問題的解決方案。 SpringBoot打包 在SpringBoot打包這塊,我們就用之前的一個web項目來進行打包。 首先需要明確的是,該項目打包的形態是可執行的 jar 包,還是在 tomcat 下運行的 war 包。 ...
  • 生成器可以理解為一種的數據結構,將演算法保存,每次計算並返回一個結果,實現了迭代器協議,生成器也是迭代器 生成器有兩種表現形式,1)生成器表達式;2)生成器函數 1、生成器表達式 說到生成器表達式,就得先說一下列表推導式 [i for i in range(10)] ,生成器表達式,就是將 [ ] 改 ...
  • 1 下載maven,並配置好,參考:https://jingyan.baidu.com/article/acf728fd68b4bef8e510a31c.html。 配置好環境變數後,在eclipse中設置maven,參考:http://blog.java1234.com/blog/articles ...
  • 1、添加元素 (1)列表末尾添加 x=[1,2] x.append(3) >>>x=[1,2,3] (2)列表中插入 x=[1,2] x.insert(1,5)# 在索引1處添加空間, 並將值5 存儲到這個地方 >>>x=[1,5,2] 2、刪除元素 (1)del語句刪除 x=[1,2,3] del ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...