使用python的一些筆記

来源:https://www.cnblogs.com/unnling/archive/2019/12/18/12063516.html
-Advertisement-
Play Games

語法 傳值與傳引用 Python參數傳遞採用的是“傳對象引用”的方式。這種方式相當於傳值和傳引用的一種綜合。 如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值--相當於通過“傳引用”來傳遞對象。 如果函數收到的是一個不可變對象(比如數字、字元或者元組)的引用,就不能直接修 ...


語法

傳值與傳引用

Python參數傳遞採用的是“傳對象引用”的方式。這種方式相當於傳值和傳引用的一種綜合。

  • 如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值--相當於通過“傳引用”來傳遞對象。
  • 如果函數收到的是一個不可變對象(比如數字、字元或者元組)的引用,就不能直接修改原始對象--相當於通過“傳值'來傳遞對象。

數組

數組合併

不能直接使用append函數直接賦值,因為該函數無返回值,可直接用 + 合併兩個數組

判斷相同和不同數目

#介面返回值
list1 = ['張三', '李四', '王五', '老二']
#資料庫返回值
list2 = ['張三', '李四', '老二', '王七']
 
a = [x for x in list1 if x in list2] #兩個列表表都存在
b = [y for y in (list1 + list2) if y not in c] #兩個列表中的不同元素
 
print('a的值為:',a)
print('b的值為:',b)
 
c = [x for x in list1 if x not in list2]  #在list1列表中而不在list2列表中
d = [y for y in list2 if y not in list1]  #在list2列表中而不在list1列表中
print('c的值為:',c)
print('d的值為:',d)

out:
a的值為: ['張三', '李四', '老二']
b的值為: ['王五', '王七']
c的值為: ['王五']
d的值為: ['王七']

排序

排序指南

對於具有命名屬性的對象:

>>> student_tuples = [
...     ('john', 'A', 15),
...     ('jane', 'B', 12),
...     ('dave', 'B', 10),
... ]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

字典排序

參考

  1. sorted函數
    首先介紹sorted函數,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse這三個參數。

其中iterable表示可以迭代的對象,例如可以是dict.items()、dict.keys()等,key是一個函數,用來選取參與比較的元素,reverse則是用來指定排序是倒序還是順序,reverse=true則是倒序(從大到小),reverse=false則是順序(從小到大),預設是reverse=false。

  1. 按照key排序
    要對字典按照key排序,可以直接調用sorted函數。
my_dict = {'lilee':25, 'age':24, 'phone':12}
sorted(my_dict.keys())
輸出結果為

['age', 'lilee', 'phone']

直接使用sorted(my_dict.keys())就能按key值對字典排序,這裡是按照順序對key值進行排序的,如果想按照倒序排序的話,只需要將reverse置為true即可。

sorted(my_dcit.keys(), reverse = true)
  1. 按照value值排序
    共有三種方法可以實現將字典按照value值進行排序

(1)key使用lambda匿名函數取value進行排序

d = {'lilee':25, 'wangyan':21, 'liqun':32, 'age':19}
sorted(d.items(), key=lambda item:item[1])
輸出結果為
[('age',19),('wangyan',21),('lilee',25),('liqun',32)]

如果需要倒序則
sorted(d.items(), key=lambda item:item[1], reverse=True)
得到的結果就會是
[('liqun',32),('lilee',25),('wangyan',21),(age',19)]

(2)使用operator的itemgetter進行排序

import operator
sorted(d.items(), key=operator.itemgetter(1))
輸出結果為

[('age',19),('wangyan',21),('lilee',25),('liqun',32)]

is和==的區別

https://www.cnblogs.com/wangkun122/p/9082088.html

is和==都是對對象進行比較判斷作用的,但對對象比較判斷的內容並不相同。下麵來看看具體區別在哪。

==比較操作符和is同一性運算符區別

==是python標準操作符中的比較操作符,用來比較判斷兩個對象的value(值)是否相等,例如下麵兩個字元串間的比較:

例1.

>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
True

is也被叫做同一性運算符,這個運算符比較判斷的是對象間的唯一身份標識,也就是id是否相同。通過對下麵幾個list間的比較,你就會明白is同一性運算符的工作原理:

例2.

>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

只有數值型和字元串型的情況下,a is b才為True,當a和b是tuple,list,dict或set型時,a is b為False

後臺

requiremnets.txt

pip freeze > requirements.txt //生成
pip install -r requirements.txt //安裝

用 r取消轉義

虛擬環境創建與激活

pip3 install virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

單元測試

import unittest

class MyTest(unittest.TestCase):  # 繼承unittest.TestCase
    def tearDown(self):
        # 每個測試用例執行之後做操作
        print('111')

def setUp(self):
    # 每個測試用例執行之前做操作
    print('22222')

@classmethod
def tearDownClass(self):
# 必須使用 @ classmethod裝飾器, 所有test運行完後運行一次
     print('4444444')
@classmethod
def setUpClass(self):
# 必須使用@classmethod 裝飾器,所有test運行前運行一次
    print('33333')

def test_a_run(self):
    self.assertEqual(1, 1)  # 測試用例
    
def test_b_run(self):
    self.assertEqual(2, 2)  # 測試用例
    
if __name__ == '__main__':
    unittest.main()#運行所有的測試用例

json 錯誤xx is not JSON serializable

在使用json的時候經常會遇到xxx is not JSON serializable,也就是無法序列化某些對象

重寫jsonEncoder

import  decimal
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        super(DecimalEncoder, self).default(o)

# and then:
json.dumps(chart_list,..., cls=DecimalEncoder)

運行Jupyter Notebook

jupyter notebook --ip=0.0.0.0 --no-browser --allow-root

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

-Advertisement-
Play Games
更多相關文章
  • 在一篇《初步瞭解JVM第一篇》中,我們已經瞭解了: 類載入器:負責載入*.class文件,將位元組碼內容載入到記憶體中。其中類載入器的類型有如下: 啟動類載入器(Bootstrap) 擴展類載入器(Extension) 應用程式類載入器(AppClassLoader) 用戶自定義載入器(User-Def ...
  • 微信公眾平臺後臺配置自定義菜單 一、首先進入微信公眾平臺, 訪問地址 https://mp.weixin.qq.com/ 二、用註冊的微信公眾號的賬號和密碼登錄,左側的功能選項中進入自定義菜單頁面 三、在自定義菜單頁面 點擊紅框的 + 號 就可以增加新的菜單 四、對新加的菜單可以根據自己的需要進行設 ...
  • 一款PHP+jQuery實現的中國地圖熱點數據統計展示實例,當滑鼠滑動到地圖指定省份區域,在彈出的提示框中顯示對應省份的數據信息。 ...
  • python中複數實現( 2) 0.5和開根號sqrt( 2)的區別 ( 2) 0.5和sqrt( 2)是不同的,前者是複數後者是會報錯的。 Python用迴圈構造的函數數組,運行這個數組裡面的函數後返回值都一樣 上面程式的輸出是: 為什麼明明f(x)返回的是x+i,而i是從0到4變化的。按道理執行 ...
  • 一般而言,函數後面只有一個括弧。如果看見括弧後還有一個括弧,說明第一個函數返回了一個函數,如果後面還有括弧,說明前面那個也返回了一個函數。以此類推。 比如fun()() PS:遇到問題沒人解答?需要Python學習資料?可以加點擊下方鏈接自行獲取 note.youdao.com/noteshare? ...
  • 1. json文件處理 1.1 什麼是json JSON(JavaScript Object Notation,JS對象簡譜)是一種輕量級的數據交換格式。它基於ECMAScript(歐洲電腦協會制定的js規範)的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得J ...
  • 1.26個字母大小寫成對列印,例如:Aa,Bb...... 2.一個list包含10個數字,然後生成一個新的list,要求新的list裡面的數都比之前的數多1 3.倒序取出每個單詞的第一個字母,例如:I am a good boy! 方法1 方法2 4.輸入一個自己的生日月份,用if和else判斷一 ...
  • 這次來學習一下SpringMVC的源碼. 對於常見的項目架構模式,比如大名鼎鼎的SSM(SpringMVC,Spring,Mybatis)框架. SpringMVC ->web層(Controller層) Spring ->service層 mybatis ->dao層 從SpringMVC層面上講 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...