日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

逆向之旅:七個(gè)讓Python編程更糟糕的小技

來源: 責(zé)編: 時(shí)間:2024-05-07 09:11:38 161觀看
導(dǎo)讀文章帶大家進(jìn)入Python編程的奇特角落,探索那些完全出乎意料甚至無厘頭的編程事實(shí)。在這里,你可以窺見如何在一行內(nèi)完成復(fù)雜的函數(shù),或者是如何完全無視掉代碼中的assert語(yǔ)句。如果你想在Python編程方面變得更糟糕,那么,這篇

文章帶大家進(jìn)入Python編程的奇特角落,探索那些完全出乎意料甚至無厘頭的編程事實(shí)。在這里,你可以窺見如何在一行內(nèi)完成復(fù)雜的函數(shù),或者是如何完全無視掉代碼中的assert語(yǔ)句。bRE28資訊網(wǎng)——每日最新資訊28at.com

bRE28資訊網(wǎng)——每日最新資訊28at.com

如果你想在Python編程方面變得更糟糕,那么,這篇文章就是為你量身定制的。bRE28資訊網(wǎng)——每日最新資訊28at.com

(1) _.__.___.____._____ 也能行

class Test:    def __getattr__(self, key):        return Test()

在一個(gè)類中,當(dāng)1用于訪問someattribute屬性2時(shí)調(diào)用magic方法someattributes屬性沒有顯式定義__getattribute__object.someattribute。bRE28資訊網(wǎng)——每日最新資訊28at.com

class Test:    def __getattr__(self, key):        return Test()_ = Test()print(_)print(_.__)print(_.__.___)print(_.__.___.____)print(_.__.___.____._____)# <__main__.Test object at 0x1098834d0># <__main__.Test object at 0x109883500># <__main__.Test object at 0x1098835c0># <__main__.Test object at 0x1098835c0># <__main__.Test object at 0x109883500>
  • _就是一個(gè)測(cè)試類對(duì)象
  • _.__調(diào)用,返回另一個(gè) Test 對(duì)象__getattr__
  • _.__.___又一次調(diào)用,返回另一個(gè)Test 對(duì)象__getattr__
  • _.__.___.____再一次調(diào)用,返回另一個(gè)Test 對(duì)象__getattr__
  • _.__.___.____._____繼續(xù)調(diào)用,返回另一個(gè)Test 對(duì)象__getattr__
  • 這就是可能的_.__.___.____._____

(2) 利用exec()在一行中寫代碼

如果你曾經(jīng)想要學(xué)的是如何在一行代碼中寫出任何 Python 函數(shù),那么這點(diǎn)就適合你。假設(shè)有一個(gè)多行函數(shù),但是并不知道如何才能合法地把它壓縮成一行代碼bRE28資訊網(wǎng)——每日最新資訊28at.com

def hi():    print('apple')    print('orange')

為了便于理解,這里有一個(gè)簡(jiǎn)明易懂的例子。bRE28資訊網(wǎng)——每日最新資訊28at.com

exec("def hi():/n. print('apple')/n  print('orange')")

exec()會(huì)將字符串作為Python代碼來執(zhí)行 因此,如果將函數(shù)編成字符串格式并把提供給exec,就成功地用python的一行代碼來寫出這個(gè)函數(shù)了bRE28資訊網(wǎng)——每日最新資訊28at.com

(3) Dog()()()()可以是有效代碼

class Dog:    passdog = Dog()print(dog())  # error

目前得到了一個(gè)錯(cuò)誤,這是因?yàn)槟J(rèn)情況下,是不能將一個(gè)對(duì)象像一個(gè)函數(shù)一樣去調(diào)用的。bRE28資訊網(wǎng)——每日最新資訊28at.com

class Dog:    def __call__(self):        return 'apple pie'dog = Dog()print(dog())  # apple pie

定義魔術(shù)方法__call__可以決定對(duì)象的調(diào)用行為,就像對(duì)函數(shù)進(jìn)行調(diào)用一樣。bRE28資訊網(wǎng)——每日最新資訊28at.com

class Dog:    def __call__(self):        return Dog()dog = Dog()print(dog())  # <class '__main__.Dog'>

在這,讓__call__返回一個(gè)新的 Dog 對(duì)象。bRE28資訊網(wǎng)——每日最新資訊28at.com

print(Dog()()()()())

由于每次都得到一個(gè)新的 Dog 對(duì)象,無論何時(shí)對(duì)Dog對(duì)象進(jìn)行調(diào)用,都可以無限地調(diào)用下去。bRE28資訊網(wǎng)——每日最新資訊28at.com

(4) 多個(gè)負(fù)號(hào)的問題

x = -1--2---3----4-----5

這是有效的 Python 代碼:bRE28資訊網(wǎng)——每日最新資訊28at.com

  • 1-2可以被解讀為 1 減 2
  • -1則被看成負(fù)數(shù)(不是減法的負(fù)號(hào))
  • --1是負(fù)負(fù),就等于 1
  • ---1是負(fù)負(fù)負(fù)的,又變成了 -1
  • 這種情況就會(huì)一直持續(xù)下去

-1--2---3----4-----5:因此,這是合法的 Python 代碼-1-(-2)-(--3)-(---4)-(----5)bRE28資訊網(wǎng)——每日最新資訊28at.com

(5)如何限制使用print()

print = Noneprint('hello world')# TypeError: 'NoneType' object is not callable

在這,將print = None,將None賦值給了print。這覆蓋了非常熟悉的常用函數(shù),因此我們現(xiàn)在無法使用print()。bRE28資訊網(wǎng)——每日最新資訊28at.com

print = None__builtins__.print('hello')  # hello

但可以用__builtins__.print來訪問原來的print()功能!bRE28資訊網(wǎng)——每日最新資訊28at.com

print = None__builtins__ = None

如果讓__builtins__設(shè)置為None。現(xiàn)在沒有人能再使用 print() 了。bRE28資訊網(wǎng)——每日最新資訊28at.com

(6)讓全局變量都消失

a = 4b = 5c = 6keys = list(globals().keys())for key in keys:    del globals()[key]del globals()['keys']del globals()['key']print(globals())  # {}print(a)  # 'a' 沒有定義
  • globals()會(huì)返回含有所有全局變量的字典
  • 可以刪掉所有在globals()中的鍵值對(duì)
  • 刪完后,globals()變成了空的
  • 這意味著沒有剩余的全局變量,并且之前定義的所有全局變量都一去不復(fù)返了

(7)可無視assert語(yǔ)句

你是不是經(jīng)常assert代碼語(yǔ)句困擾?別擔(dān)心,因?yàn)橛幸环N方法能讓你完全無視掉assert語(yǔ)句。bRE28資訊網(wǎng)——每日最新資訊28at.com

# hello.pyassert 1 == 2

如果用python hello.py來運(yùn)行它,由于 assert 語(yǔ)句,會(huì)收到一個(gè) AssertionError。bRE28資訊網(wǎng)——每日最新資訊28at.com

# hello.pyassert 1 == 2
  • 也可以選擇用python -O hello.py來運(yùn)行它
  • -O標(biāo)志讓 Python 忽略所有的assert語(yǔ)句
  • 現(xiàn)在,可以讓你的代碼忽略所有 assert 語(yǔ)句,無論它們會(huì)捕獲何種錯(cuò)誤!畢竟,誰(shuí)在乎呢?

結(jié)論

文章帶大家進(jìn)入Python編程的奇特角落,探索那些完全出乎意料甚至無厘頭的編程事實(shí)。在這里,你可以窺見如何在一行內(nèi)完成復(fù)雜的函數(shù),或者是如何完全無視掉代碼中的assert語(yǔ)句。bRE28資訊網(wǎng)——每日最新資訊28at.com

如果你對(duì)編程充滿好奇或者想成為一個(gè)更糟糕的程序員,那么這篇文章將為你揭開一個(gè)被藏在細(xì)節(jié)里的驚人世界。bRE28資訊網(wǎng)——每日最新資訊28at.com


bRE28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-87002-0.html逆向之旅:七個(gè)讓Python編程更糟糕的小技

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 30秒內(nèi)輕松檢測(cè)Python文件的變化

下一篇: TypeScript 中的 Extends 怎么那么優(yōu)秀啊?

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 28個(gè)SpringBoot項(xiàng)目中常用注解,日常開發(fā)、求職面試不再懵圈

    前言在使用SpringBoot開發(fā)中或者在求職面試中都會(huì)使用到很多注解或者問到注解相關(guān)的知識(shí)。本文主要對(duì)一些常用的注解進(jìn)行了總結(jié),同時(shí)也會(huì)舉出具體例子,供大家學(xué)習(xí)和參考。注解
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫(kù),還使用這些庫(kù)實(shí)現(xiàn)了一個(gè)流處理程序
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個(gè)人開發(fā)仿造稿定設(shè)計(jì)的圖片編輯器到現(xiàn)在,不知不覺已過去一年時(shí)間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒有很好地履行計(jì)劃.....這些就放在日
  • 一文掌握 Golang 模糊測(cè)試(Fuzz Testing)

    模糊測(cè)試(Fuzz Testing)模糊測(cè)試(Fuzz Testing)是通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法。可以用來發(fā)現(xiàn)應(yīng)用程序、操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議等中的漏洞或
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟(jì)”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內(nèi)的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項(xiàng)。通過上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專業(yè)資質(zhì)認(rèn)證的得物鑒
  • 自律,給不了Keep自由!

    來源 | 互聯(lián)網(wǎng)品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時(shí)不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺(tái)Keep正式登陸港交所,努力
  • 消費(fèi)結(jié)構(gòu)調(diào)整丨巨頭低價(jià)博弈,拼多多還卷得動(dòng)嗎?

    來源:征探財(cái)經(jīng)作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經(jīng)主攻中高端與品質(zhì)的淘寶天貓、京東重拾&ldquo;低價(jià)&rdquo;口號(hào)。而過去與他們錯(cuò)位競(jìng)爭(zhēng)的拼多多,靠
  • 一條抖音4億人圍觀 ! 這家MCN比無憂傳媒還野

    作者:Hiu 來源:互聯(lián)網(wǎng)品牌官01 擦邊少女空降熱搜,幕后推手曝光被網(wǎng)友譽(yù)為&ldquo;純欲天花板&rdquo;的女網(wǎng)紅井川里予,近期因?yàn)橐唤M哥特風(fēng)照片登上熱搜,引發(fā)了一場(chǎng)互聯(lián)網(wǎng)世界關(guān)于
  • 榮耀Magic4 至臻版 首創(chuàng)智慧隱私通話 強(qiáng)勁影音系統(tǒng)

    2022年第一季度臨近尾聲,在該季度內(nèi),許多品牌陸續(xù)發(fā)布自己的最新產(chǎn)品,讓大家從全新的角度來了解當(dāng)今的手機(jī)技術(shù)。手機(jī)是電子設(shè)備中,更新迭代十分迅速的一款產(chǎn)品,基
Top 主站蜘蛛池模板: 凤冈县| 军事| 汝阳县| 南丰县| 光山县| 闻喜县| 桃园县| 满洲里市| 沂南县| 宜川县| 巴马| 梅河口市| 赣州市| 壤塘县| 阳信县| 辰溪县| 石屏县| 诏安县| 蒙阴县| 浠水县| 鹿泉市| 于田县| 海宁市| 江阴市| 新巴尔虎左旗| 高青县| 巧家县| 格尔木市| 穆棱市| 孟连| 衡东县| 卫辉市| 临西县| 巴林右旗| 牙克石市| 格尔木市| 惠安县| 龙井市| 清流县| 客服| 中牟县|