1. 程式人生 > >Python程式設計中一定要注意的那些“坑”(一)

Python程式設計中一定要注意的那些“坑”(一)

1  逗號不是運算子,只是個普通的分隔符
>>> x = 3, 5
>>> x
(3, 5)
>>> x == 3, 5
(False, 5)
>>> 1, 2, 3
(1, 2, 3)
>>> 3 in [1, 2, 3], 5
(True, 5)


2  ++和--也不是運算子,雖然有時候這樣用也行
>>> x = 3
>>> x+++5
8
>>> x++
SyntaxError: invalid syntax
>>> ++5
5
>>> ++++++++5
5


>>> --5
5

# 下面這個程式碼是上面那個程式碼的等價形式

>>> -(-5)
5
>>> ---------5
-5


3  lambda表示式中變數的作用域
>>> d = dict()
# 這裡有個坑
>>> for i in range(5):
       d[i] = lambda :i**2
 
>>> d[2]()
16
>>> d[3]()
16
# 這樣看的更清楚一些
# lambda表示式中i的值是呼叫時決定的

>>> i = 10
>>> d[0]()
100


# 寫成下面這樣子就沒問題了
>>> d = dict()
>>> for i in range(5):
       d[i] = lambda x=i:x**2
 
>>> d[2]()
4
>>> d[3]()
9


4  某個作用域中只要有某變數的賦值語句,它就是個區域性變數
>>> x = 10
>>> def demo():
       print(x)
# 這樣是可以的,訪問全域性變數
>>> demo()
10
>>> def demo():
       print

(x)
       x = 3
       print(x)
# 這樣是錯的,x是區域性變數,在x=3之前不存在x,print()失敗
>>> demo()
Traceback (most recent call last):
  File "<pyshell#156>", line 1, in <module>
    demo()
  File "<pyshell#155>", line 2, in demo
    print(x)
UnboundLocalError: local variable 'x' referenced before assignment


5  糾結的元組到底可變不可變
>>> x = (1, 2, 3)
# 元組中的元素不可修改
>>> x[0] = 4
Traceback (most recent call last):
  File "<pyshell#161>", line 1, in <module>
    x[0] = 4
TypeError: 'tuple' object does not support item assignment

>>> x = ([1, 2], 3)
# 不能修改元組中的元素值
>>> x[0] = [3]
Traceback (most recent call last):
  File "<pyshell#163>", line 1, in <module>
    x[0] = [3]
TypeError: 'tuple' object does not support item assignment

>>> x
([1, 2], 3)
>>> x[0] = x[0] + [3]
Traceback (most recent call last):
  File "<pyshell#165>", line 1, in <module>
    x[0] = x[0] + [3]
TypeError: 'tuple' object does not support item assignment

>>> x
([1, 2], 3)
# 這裡有個坑,雖然顯示操作失敗了,但實際上成功了
>>> x[0] += [3]
Traceback (most recent call last):
  File "<pyshell#167>", line 1, in <module>
    x[0] += [3]
TypeError: 'tuple' object does not support item assignment

>>> x
([1, 2, 3], 3)
>>> x[0].append(4)
>>> x
([1, 2, 3, 4], 3)
# y和x[0]指向同一個列表,通過其中一個可以影響另一個
>>> y = x[0]
>>> y += [5]
>>> x
([1, 2, 3, 4, 5], 3)
# 執行完下面的語句,y和x[0]不再是同一個物件
>>> y = y + [6]
>>> x
([1, 2, 3, 4, 5], 3)
>>> y
[1, 2, 3, 4, 5, 6]

6  字串轉換成數字的幾種方式

>>> eval('9.9')
9.9
>>> eval('09.9')
9.9
>>> float('9.9')
9.9
>>> float('09.9')
9.9
>>> int('9')
9
>>> int('09')
9

# 坑來了,使用eval()轉換整數時前面不能有0

>>> eval('09')
Traceback (most recent call last):
  File "<pyshell#187>", line 1, in <module>
    eval('09')
  File "<string>", line 1
    09
     ^
SyntaxError: invalid token

相關推薦

Python程式設計一定注意那些

1  逗號不是運算子,只是個普通的分隔符 >>> x = 3, 5 >>> x(3, 5) >>> x == 3, 5(False, 5) >>> 1, 2, 3(1, 2, 3) >>&g

java那些

下面的坑有些來自別人的技術部落格,有些事以前自己遇到的坑,持續補充。。。 坑1:三目運算子 首先我們看一下這道題:char x = 'x';System.out.println(true?120:x); 我們的第一反應結果不就是120嗎,但是我們實際執行一下,結果是x。是

boost log -- 使用心得和碰到的那些

最近研究了一下boost::log這個庫,記錄一下心路歷程 我的需求是log功能儘可能的不消耗程式時間,列印到stdout, log需要提供如下資訊:時間,執行緒ID,程序名字,日誌等級,檔案及行號 我的測試環境 boost 1.67 gcc version

不得不說的那些

V4 26.0.0 FragmentManagerDelegate異常 V4-26.0.0 FragmentManagerDelegate異常 今天敲程式碼的時候。同事給我提了個BUG。我們的表情鍵盤一點就崩潰了。我當時有點發愣,用了半年的東西突然就

記錄一個自己放的小錯誤,python程式設計的,注意同名變數!!!

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import numpy as np import matplotlib.pyplot as plt tf.set_random_s

工作碰到的那些-安卓混合開發webview開啟連結出錯

https%3a%2f%2fmapi.alipay.com%2fgateway.do%3f_input_charset%3dutf-8%26it_b_pay%3d1d%26notify_url%3dhttp%253A%252F%252Fpay.jz-test.ganji.com%252Fpay%252Fnot

春天多吃這菜,全家整年不生病!一定多吃!收藏

唐代 維護 平臺 ucc height 豆腐幹 血液循環 text ron 春天多吃這菜,全家整年不生病!一定要多吃!(收藏)2016-03-03正所謂“一年之計在於春”,春天養生養對了,一年都不會生病!食療養生是最常見的養生方法,春天食療養生切不可以少了下面這些食物,他們

DeepFM演算法解析及Python實現 FFM演算法解析及Python實現 FM演算法解析及Python實現 詞嵌入的那些事兒

1. DeepFM演算法的提出 由於DeepFM演算法有效的結合了因子分解機與神經網路在特徵學習中的優點:同時提取到低階組合特徵與高階組合特徵,所以越來越被廣泛使用。 在DeepFM中,FM演算法負責對一階特徵以及由一階特徵兩兩組合而成的二階特徵進行特徵的提取;DNN演算法負責對由輸入的一階特徵進行全連線

Python 爬取網頁JavaScript動態新增的內容

當我們進行網頁爬蟲時,我們會利用一定的規則從返回的 HTML 資料中提取出有效的資訊。但是如果網頁中含有 JavaScript 程式碼,我們必須經過渲染處理才能獲得原始資料。此時,如果我們仍採用常規方法從中抓取資料,那麼我們將一無所獲。那麼,通過Web kit可以簡單解決這個

【安裝教程】python3.6安裝Tensorflow-GPU路上的那些WIN10

最近A股動盪難料,筆者在最近的兩週裡證券賬戶裡的資金縮水了10%,成功地完成了一個合格中國韭菜的本分工作——我買就跌停,我賣就瘋漲。三個月的炒股經歷成功交了一大筆學費,昨天週五對股市徹底喪失信心,灰溜溜地清了波倉,準備潛心研究一手股票資料再重振旗鼓捲土歸來。 恰逢文字挖掘的

Python程式設計】PDF檔案讀寫demo mark

# pdf_demo.py # coding: utf-8 # de8ug # 需要提前安裝:pip install reportlab from reportlab.lib.pagesizes import A4 from reportlab.pdfgen import canvas

Python多執行緒的理解和使用Threadingjoin()函式的理解

1. 多執行緒的概念 多執行緒類似於同時執行多個不同程式,多執行緒執行有如下優點: 使用執行緒可以把佔據長時間的程式中的任務放到後臺去處理。 使用者介面可以更加吸引人,這樣比如使用者點選了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度  程式的執行速

移動端那些事兒移動端開發注意事項

對於手機網站建設,總結了如下幾點注意: 1、 安卓瀏覽器看背景圖片,有些裝置會模糊。 用同等比例的圖片在PC機上很清楚,但是手機上很模糊,原因是什麼呢? 經過研究,是devicePixelRatio作怪,因為手機解析度太小,如果按照解析度來顯示網頁,這樣字會非常小,所以蘋果當初就把iPhone 4的9

boost log -- 使用心得和碰到的那些

前一篇文章boost log – 使用心得和碰到的那些坑(一) 寫了如何使用boost;;log, 這篇文章主要寫寫怎樣用boost;;log構建一個工程,目的就是讓使用者使用時忘掉log細節。 專案依賴 boost c++11 cmake 設計 為了以後擴充套

學習 Laravel 那些 路由

位置 5.4的時候,路由還在 app/Http/routes.php 5.6的時候就挪到 app 目錄外的 routes/web.php 對於一個 MVC 框架,如何解析路由是非常重要的問題,這樣變來變去真得好嗎?

關於python編解碼的一些

學過python的都知道,python的encode,decode裡面有一些坑,掉進去後比較難爬出來。正好這段時間想總結一下這些坑,我會寫2-3篇文章來介紹我對這些坑的理解。既然是個人理解,那很可能有些考慮不對的地方。因此如果大家自認為有更準確的理解,也希望能相

網路那些事兒之神奇的通訊

       考試大戰在即,這是大二生涯中最後一場戰役,為了給自己這半年的戎馬生涯畫上一個圓滿句號,故最近幾天在複習(其實說預習更為合理一些)《計算機網路》這門課程。臨時抱佛腳,真心地不好。不過好在自

Django使用過程遇到的

最近在使用Django做專案。由於是python新手,開發過程中遇到了很多坑,現記錄下來,與大家分享。 登入模組是web開發中必不可少的。在此專案中,實際場景是這樣的:使用者的登入、退出功能需要接入SSO(單點登入系統)進行統一管理。退出時,需要把當前登入使用者的sessi

計算機那些事兒:妙用遠端,方便你我他!

你還在為忘記電腦關機,傳檔案忘帶u盤,急著操作電腦而不在電腦旁,,,而苦惱嗎??? 如果是,那恭喜您,以下的方法一定會接觸您的煩惱!如果不是,那也恭喜您,一起下去看看吧下面的內容一定會讓您解除將來的煩