国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初識(shí)python

gitmilk / 2586人閱讀

很早就聽說python的赫赫大名了,這學(xué)期學(xué)校也開了這門課,正好可以感受一下這門語言的魅力,對(duì)比C/C++/JAVA,它到底有什么獨(dú)特的地方呢?

"Life is short, you need Python"    --Bruce Eckel
人生苦短,我用python
一. 初印象:short

曾經(jīng)有這樣一個(gè)段子,說聯(lián)合國同樣一份檔案,用五大官方語言寫的不同版本中,最薄的那份一定是漢語的。

這個(gè)段子放在python身上同樣也成立,幾大主流語言寫同樣一個(gè)功能,python的代碼量一定是最短的那個(gè)。

比如同樣是hello world
C/C++需要五行:

#include 
int main() {
    printf("Hello, World!");
    return 0;
}

java也需要五行,但代碼量明顯比上面的要多:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

再看看java的“小弟”javascript:



    第一個(gè)JavaScript程序




 

php:


 
  PHP 測(cè)試
 
 
 Hello World

"; ?>

js和php排除必要的html標(biāo)簽,也需要一兩行,再看看python:

print("Hello World")

只需要一行,簡單到?jīng)]朋友,難怪連小學(xué)生都可以輕易上手

這只是python代碼簡短的冰山一角,它幾乎每一部分都是圍繞"short"來設(shè)計(jì)的

二、靈活

即使只看列表這一節(jié),也能感受到python的語法是相當(dāng)靈活的

1. 使用列表推導(dǎo)式生成列表
#生成含0到9的列表
list = [ x for x in range(10)]
#[0,1,2,3,4,5,6,7,8,9]
#生成指定列表中平方大于200的數(shù)的列表
list = [10, 20, 30, 40, 50, 60]
result = [x for x in list if x * x > 200]
#[20, 30, 40, 50, 60]

列表推導(dǎo)式可以看成是for循環(huán)的一種簡寫,使得生成列表的過程變得十分簡單。

2. 使用切片操作列表

舉個(gè)簡單的例子:

list = [x for x in range(10)]
#list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#從list中下標(biāo)0開始,到下標(biāo)8結(jié)束,間隔為2取列表中的元素
result = list[0:8:2]
#result = [0, 2, 4, 6]

事實(shí)上,切片的功能遠(yuǎn)非如此,列表的增刪改查都可以通過切片實(shí)現(xiàn)

#逆置
result = list[::-1]
#刪除列表下標(biāo)為0,1,2的元素
list[:3] = []
#將列表偶數(shù)位賦值為0
list[::2] = [0] * (len(list)//2)

切片更多的操作這里就不再贅述,總之這個(gè)操作十分靈活,但有時(shí)卻不能一眼看出操作實(shí)際目的,可讀性低

4. 解包壓包,讓代碼效率如此之高

序列解包,最簡單的理解就是將列表,集合等序列里的元素剝離出來,而壓包則是相反的過程
最簡單的解包:

x, y, z = [1, 2, 3]
#x = 1, y = 2, z = 3

利用這個(gè)功能就可以非常簡便地實(shí)現(xiàn)交換

x, y, z = z, x, y
# x = 3, y = 1, z = 2

也可以替代切片操作(表示多個(gè)元素,_表示忽略元素,_表示忽略多個(gè)元素)

x, *y, z = [1, 2, 3, 4, 5]
# x = 1
# y = [2, 3, 4]
# z = 5

x, *_, z = [1, 2, 3, 4, 5]
# x = 1
# z = 5

還可以讓函數(shù)返回多個(gè)值:

def testFun(name, number):
    return "name:" + name, "age:" + number
    
name, number = testFun("zhangsan", "24")
print(name, number)
# name:zhangsan age:24

最簡單的壓包:

key = ["name", "age", "number"]
value = ["zhangsan", 12, 1000]
person = dict(zip(key, value))
#person = {"name": "zhangsan", "age": 12, "number": 1000}

解包與壓包混用:

data = [
    ("Bob", "1990-1-1", 60),
    ("Mary", "1996-1-4", 50),
    ("Nancy", "1993-3-1", 55)
]
for name, *args in data:
    print(name, args)
    
# Bob ["1990-1-1", 60]
# Mary ["1996-1-4", 50]
# Nancy ["1993-3-1", 55]

在函數(shù)當(dāng)中使用(可變參數(shù))與*(關(guān)鍵字參數(shù),將實(shí)參解釋為鍵值對(duì)):

def myfun(first, *middle, last, ** keyAndValue):
        print("first = ", first)
        print("middle = ", middle)
        print("last = ", last)
        print("keyAndValue = ", keyAndValue)
        
myfun(1,2,3, last = 4, name = "zhangsan", age = 1)

# first =  1
# middle =  (2, 3)
# last =  4
# keyAndValue =  {"name": "zhangsan", "age": 1}     

利用***混用表示任意參數(shù),例如在裝飾器模式中:

def mydecorator(func):
     def wrapper(*args, **kw):
         print("一個(gè)裝飾器")
         return func(*args, **kw)
     return wrapper

@mydecorator
def myfun(name, age, number):
    print(name, age, number)
    
myfun("zhangsan", 24, 1000)

wrapper函數(shù)使用*args, **kw作為參數(shù),則被修飾的myfun函數(shù)需要的參數(shù)無論是什么樣的,傳入wrapper都不會(huì)報(bào)錯(cuò),這保證了裝飾器可以修飾各種各樣函數(shù)的靈活性。

總結(jié)

python剛?cè)腴T,確實(shí)被它簡潔的語法給深深吸引了,甚至一度懷疑自己是在敲指令,而非寫代碼,但它的靈活多變的特性也使得程序在我寫完沒過幾天,就完全看不懂了,即使是一個(gè)逗號(hào),冒號(hào)也會(huì)隱藏大量細(xì)節(jié),而這樣的細(xì)節(jié)通常很難debug出來。代碼太過簡潔,有利也有弊。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43440.html

相關(guān)文章

  • Python基礎(chǔ)系列:初識(shí)python引用計(jì)數(shù)與弱引用

    摘要:第一次初始化對(duì)象,并且用變量來引用,所以這里的引用計(jì)數(shù)就為。接下來通過創(chuàng)建一個(gè)弱引用,通過打印引用計(jì)數(shù)后,發(fā)現(xiàn)計(jì)數(shù)并沒有改變。由于一次僅能有一個(gè)對(duì)象被回收,引用計(jì)數(shù)無法回收循環(huán)引用的對(duì)象。所以弱引用很適合處理這種循環(huán)引用的場(chǎng)景。 寫在前邊: 之前的socket系列就告一段落,主要是對(duì)自己所學(xué)做一個(gè)總結(jié)與記錄。 接下來我打算基于libevent寫一個(gè)支持并發(fā)的HTTP服務(wù)器。因?yàn)橹皩W(xué)習(xí)...

    robin 評(píng)論0 收藏0
  • 趣味Python入門(一):初識(shí)Python

    摘要:盡管如此,還具有高級(jí)的數(shù)據(jù)類型和靈活性。它配備了大量的標(biāo)準(zhǔn)模塊,可用于程序庫。一些模塊提供如下功能通過這些很贊的特性,瞬時(shí)化身為面向過程的語言。開發(fā)者可以便捷地將解釋器連接到一個(gè)使用編寫的應(yīng)用程序,并能隨時(shí)用作擴(kuò)展。下一部分會(huì)繼續(xù)分享。 【編者按】本文作者是 Abhishek Jaiswal ,擅長 .NET、C#、Python 等多種語言的技術(shù)控。本文中,作者通過活潑有趣的口吻向大家...

    sutaking 評(píng)論0 收藏0
  • python綜合學(xué)習(xí)七之TensorFlow初識(shí)

    摘要:從這一節(jié)開始,將系統(tǒng)的學(xué)習(xí)這個(gè)開源包。為何要使用無可厚非地能被認(rèn)定為神經(jīng)網(wǎng)絡(luò)中最好用的庫之一。它擅長的任務(wù)就是訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)。 從這一節(jié)開始,將系統(tǒng)的學(xué)習(xí)TensorFlow這個(gè)開源包。 一、TensorFlow概念 TensorFlow是Google開發(fā)的一款神經(jīng)網(wǎng)絡(luò)的Python外部的結(jié)構(gòu)包, 也是一個(gè)采用數(shù)據(jù)流圖來進(jìn)行數(shù)值計(jì)算的開源軟件庫.TensorFlow 讓我們可以先繪制...

    qiangdada 評(píng)論0 收藏0
  • NeoVim初識(shí)

    摘要:檢查是否已經(jīng)有了支持看到這個(gè),就是成功了添加支持首先查看本機(jī)的在哪個(gè)位置,比如。安裝到目錄下然后在配置文件中加入引用注意后要用單引號(hào)。重啟后,在中安裝應(yīng)用的命令 安裝 Mac上安裝(無需編譯直接解壓運(yùn)行): cd /tmp wget https://github.com/neovim/neovim/releases/download/v0.3.1/nvim-macos.tar.gz &...

    褰辯話 評(píng)論0 收藏0
  • Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第三節(jié):你好Redis-文章投票試煉

    摘要:為了防止用戶對(duì)同一篇文章進(jìn)行多次投票,網(wǎng)站需要為每一篇文章記錄一個(gè)已投票用戶名單。上一篇文章實(shí)戰(zhàn)第一章初識(shí)第二節(jié)數(shù)據(jù)結(jié)構(gòu)簡介下一篇文章實(shí)戰(zhàn)第二章使用構(gòu)建應(yīng)用第一節(jié)登錄和緩存 上一篇文章: Python--Redis實(shí)戰(zhàn):第一章:初識(shí)Redis:第二節(jié):Redis數(shù)據(jù)結(jié)構(gòu)簡介下一篇文章:Python--Redis實(shí)戰(zhàn):第二章:使用Redis構(gòu)建Web應(yīng)用:第一節(jié):登錄和cookie緩存 ...

    Meils 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<