SlideShare a Scribd company logo
1 of 57
Download to read offline
Python Decorators
Yiwei
Syntax Sugar
@some_decorator
def my_func(my_arg1, my_arg2):
......
def my_func(my_arg1, my_arg2):
......
my_func = some_decorator(my_func)
decorator: 一個吃 function 吐 function 的 function
def some_decorator(func):
def wrapper(a1, a2):
print('call '+func.__name__)
return func(a1, a2)
return wrapper
def my_func(my_arg1, my_arg2):
......
my_func = some_decorator(my_func)
大家可以回家啦 (?)
my_func = some_decorator(my_func) # WTF?
function 是一個「東西」
● 可以 assign
● 可以傳進另一個 function
● 可以定義在另一個 function,並回傳之
def f1(n):
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f2 = f1
def f1(n):
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f2 = f1
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f1f2
function 的定義
def f1(n):
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f2 = f1
f1 # <function f1 at 0x7f807e6261e0>
f2 # <function f1 at 0x7f807e6261e0>
f2(10) # 55
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f1f2
function 的定義
def f(number):
return number*10
def g(func, n):
return func(n)+8
# ⇧目前為止都只是定義,還沒被執行
g(f, 3) # 38
str_list.sort(key=str.lower)
注意不是 str.lower()
def f(number):
return number*10
def g(func, n):
return func(n)+8
# ⇧目前為止都只是定義,還沒被執行
g(f, 3) # 38
def gen_fat_checker(bmi):
bmi_bound = bmi
def f(w, h):
return w/(h*h) > bmi_bound
return f
fat = gen_fat_checker(20)
super_fat = gen_fat_checker(30)
print(fat(80.0, 1.7))
print(super_fat(80.0, 1.7))
def gen_fat_checker(bmi):
bmi_bound = bmi
return f
fat = gen_fat_checker(20) #只拿到函數本體
super_fat = gen_fat_checker(30) #還沒執行 f
print(fat(80.0, 1.7)) #現在才執行
print(super_fat(80.0, 1.7))
f = 敘述 function 要做什麼, 也敘述他吃2個參數
def gen_fat_checker(bmi):
bmi_bound = bmi
def f(w, h):
return w/(h*h) > bmi_bound
return f
def gen_fat_checker(bmi_bound):
def f(w, h):
return w/(h*h) > bmi_bound
return f
my_func = some_decorator(my_func)
function 是一個「東西」
● 可以 assign
● 可以傳進另一個 function
● 可以定義在另一個 function,並回傳之
知道了 function 是頭等公民...
decorator: 一個吃 function 吐 function 的 function
def some_decorator(func):
def wrapper(a1, a2):
print('call '+func.__name__)
return func(a1, a2)
return wrapper
def my_func(m1, m2):
print('{} {}'.format(m1, m2))
return m1 + m2
my_func = some_decorator(my_func)
my_func(5, 8)
Agenda
● Function as a “first-class citizen”
● Why decorator?
● 最簡單的 decorator
● 複雜一點的 decorator
Why decorator?
Query
def query_mysql(sql):
...
return result
res = query_mysql('select *')
Query with retry
def query_mysql(sql):
...
return result
for i in range(5):
try:
res = query_mysql('select *')
except:
sleep(60)
Download with retry
def download_s3(path):
...
return result
for i in range(5):
try:
res = download_s3('s3://a.csv')
except:
sleep(60)
XXXXX with retry
def find_mongo(q):
...
return result
for i in range(5):
try:
res = find_mongo('{f: 1}')
except:
sleep(60)
retry 吃 function (和其參數)
def retry(do_work, work_arg):
for i in range(5):
try:
return do_work(work_arg)
except:
sleep(60)
res = retry(query_mysql, 'select *')
retry 累贅,重點是執行 do_work(work_arg)
def retry(do_work, work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
retry(query_mysql, 'select *')
retry(download_s3, 's3://a.csv')
retry(find_mongo, '{f: 1}')
重點是執行 do_work(work_arg)
def retry(do_work, work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
retry(query_mysql, 'select *')
真的在執行
retry_query_mysql( 'select *')
可能寫成這樣嗎?
def retry(do_work) work_arg:
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
retry(query_mysql, 'select *')
真的在執行
retry(query_mysql)('select *')
可能寫成這樣嗎?
錯!
def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
retry(query_mysql)('select *')
只是定義:
吃一個arg的函數
一個吃 function 吐 function 的 function
def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
retry(query_mysql) #work is not executed
res = retry(query_mysql)('select *')
def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
res = retry(query_mysql)('select *')
def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
query_mysql = retry(query_mysql)
res = query_mysql('select *')
和這一個 section 第一頁的
呼叫法一樣了
decorator: syntax sugar
def retry(work):
def wrapper(work_arg):
work(work_arg)
return wrapper
def query_mysql(sql):
...
query_mysql = retry(query_mysql)
res = query_mysql('select *')
如果這 function 有一百行
就很難知道 query_mysql 被改了
def retry(work):
def wrapper(work_arg):
work(work_arg)
return wrapper
@retry
def query_mysql(sql):
...
res = query_mysql('select *')
Syntax Sugar
@decorator
def work():
......
def work():
......
work = decorator(work)
Syntax Sugar
@f2
@f1
def work():
......
def work():
......
work = f2(f1(work))
定義 vs. 使用
@measure_time
@cache
def work(w1):
......
def work(w1):
......
work = measure_time(
cache(
work))
r = work('123')
● 使用方式不變
● 擴充功能:
和黃金聖衣一樣
● 內在不變,但外在
變了
(你的work不是你的work)
def deco(work):
def wrapper(work_arg):
# TRICK BEFORE
work_res = work(work_arg)
# TRICK AFTER
return wrapper
● 根據 arg 來記住結果不執行 work (@lru_cache)
● 計時 work 花多久時間
● assert / verbose / logging
● @app.route(‘/get/<id>/’) 僅回傳 func 本身,同時也記起來
● @property
所以你應該會寫 decorator 給別人用了
def deco(work):
def _wrapper(work_arg):
return work(work_arg)
return _wrapper
def my_work(w1): @deco
... def my_work(w1):
my_work = deco(my_work) ...
res = my_work('123')
最簡單的 decorator
def retry(work):
def wrapper(work_arg):
for i in range(5):
try:
return work(work_arg)
except:
sleep(60)
return wrapper
@retry
def download(file1, file2):
...
事情不是憨人想得這麼簡單
@deco
def work(w1):
...
@deco
def work(w1, w2, w3):
...
@deco(d1=xx)
def work(w1):
...
def deco(work):
def _wrapper(work_arg):
return work(work_arg)
return _wrapper
@deco
def work_a(w1):
@deco
def work_b(w1, w2, w3=None):
1. 不知道使用你 deco 的 function 有多少個參數
def deco(work):
def _wrapper(*args, **kwargs):
return work(*args, **kwargs)
return _wrapper
@deco
def work_a(w1):
@deco
def work_b(w1, w2, w3=None):
就回傳可以吃任意個參數的 wrapper
def deco(work, d_arg1):
def _wrapper(*args, **kwargs):
print(d_arg1)
return work(*args, **kwargs)
return _wrapper
def work_a(w1, w2, w3=None):
...
work_a = deco(work_a, 5)
work_a(11, 22, 33)
2. 想讓 decorator 自身也接受參數
def deco(work, d_arg1):
def _wrapper(*args, **kwargs):
print(d_arg1)
return work(*args, **kwargs)
return _wrapper
def work_a(w1, w2, w3=None):
...
work_a = deco(work_a, 5)
work_a(11, 22, 33)
2. 想讓 decorator 自身也接受參數
可以,
但沒有 syntax sugar
@retry
def download(file):
......
@retry(attempts=5)
def download(file):
......
retry(download)
retry(attempts=5)(download)
藍色的部份,也就是 @ 後面的部份可以視作一個 expression,這個 expression 回傳的東西會被呼叫
def deco(d_arg1):
def _decorator(work):
def _wrapper(*args, **kwargs):
print(d_arg1)
return work(*args, **kwargs)
return _wrapper
return _decorator
def work_a(w1, w2): @deco(5)
... def work_a(w1, w2):
work_a = deco(5)(work_a) ...
work_a(11, 22)
讓 @xxx 獨立於 work 之外
def deco(work):
def _wrapper(*args, **kwargs):
return work(*args, **kwargs)
return _wrapper
deco(my_work)(11, 22)
def p_deco(d_arg1):
def _decorator(work):
def _wrapper(*args, **kwargs):
print(d_arg1)
return work(*args, **kwargs)
return _wrapper
return _decorator
p_deco(42)(my_work)(11, 22) (做了呼叫的) p_deco(42)
是一個吃 work 的 function --
亦即裡面定義的 _decorator
deco
是一個吃 work 的 function
def deco(work):
def _wrapper(*args, **kwargs):
return work(*args, **kwargs)
return _wrapper
@deco
def my_work(w1, w2):
def p_deco(d_arg1):
def _decorator(work):
def _wrapper(*args, **kwargs):
print(d_arg1)
return work(*args, **kwargs)
return _wrapper
return _decorator
@p_deco(42)
def my_work(w1, w2):
多了一層,因為和
“deco” 只是定義相比,
”p_deco(42)” 做了呼叫
Takeaway
my_func = some_decorator(my_func)
function 是一個「東西」
● 可以 assign
● 可以傳進另一個 function
● 可以定義在另一個 function,並回傳之
def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
retry(query_mysql) #work is not executed
res = retry(query_mysql)('select *')
decorator: syntax sugar
@measure_time
@cache
def work(w1):
......
def work(w1):
......
work = measure_time(
cache(
work))
r = work('123')
● 使用方式不變
● 擴充功能:
和黃金聖衣一樣
● 內在不變,但外在
變了
(你的work不是你的work)
def deco(work):
def _wrapper(*args, **kwargs):
return work(*args, **kwargs)
return _wrapper
@deco
def my_work(w1, w2):
def p_deco(d_arg1):
def _decorator(work):
def _wrapper(*args, **kwargs):
print(d_arg1)
return work(*args, **kwargs)
return _wrapper
return _decorator
@p_deco(42)
def my_work(w1, w2):
大家可以回家啦!
Reference
Reference
● https://www.python.org/dev/peps/pep-0318/ (must see)
● https://docs.python.org/3/reference/compound_stmts.html
#function
● Book “Guide to: learning Python Decorators”
● work 可以動,不代表你的 work 是你的 work
○ print(work.__name__)
○ https://hynek.me/articles/decorators/
○ http://blog.dscpl.com.au/2014/01/how-you-implemented-your-pyth
on.html
○ https://github.com/GrahamDumpleton/wrapt

More Related Content

What's hot

Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.
Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.
Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.Samuel Fortier-Galarneau
 
Recursion to iteration automation.
Recursion to iteration automation.Recursion to iteration automation.
Recursion to iteration automation.Russell Childs
 
Python profiling
Python profilingPython profiling
Python profilingdreampuf
 
Decorators in Python
Decorators in PythonDecorators in Python
Decorators in PythonBen James
 
Creating Lazy stream in CSharp
Creating Lazy stream in CSharpCreating Lazy stream in CSharp
Creating Lazy stream in CSharpDhaval Dalal
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)Jacek Laskowski
 
Коварный code type ITGM #9
Коварный code type ITGM #9Коварный code type ITGM #9
Коварный code type ITGM #9Andrey Zakharevich
 
Python Programming: Data Structure
Python Programming: Data StructurePython Programming: Data Structure
Python Programming: Data StructureChan Shik Lim
 
TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.lnikolaeva
 
C++ L03-Control Structure
C++ L03-Control StructureC++ L03-Control Structure
C++ L03-Control StructureMohammad Shaker
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation JavascriptRamesh Nair
 
Python opcodes
Python opcodesPython opcodes
Python opcodesalexgolec
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchainedEduard Tomàs
 

What's hot (20)

Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.
Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.
Decorators Explained: A Powerful Tool That Should Be in Your Python Toolbelt.
 
Recursion to iteration automation.
Recursion to iteration automation.Recursion to iteration automation.
Recursion to iteration automation.
 
Python profiling
Python profilingPython profiling
Python profiling
 
Decorators in Python
Decorators in PythonDecorators in Python
Decorators in Python
 
Creating Lazy stream in CSharp
Creating Lazy stream in CSharpCreating Lazy stream in CSharp
Creating Lazy stream in CSharp
 
Docopt
DocoptDocopt
Docopt
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
 
Коварный code type ITGM #9
Коварный code type ITGM #9Коварный code type ITGM #9
Коварный code type ITGM #9
 
C++ L05-Functions
C++ L05-FunctionsC++ L05-Functions
C++ L05-Functions
 
Python Programming: Data Structure
Python Programming: Data StructurePython Programming: Data Structure
Python Programming: Data Structure
 
TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.
 
C++ L04-Array+String
C++ L04-Array+StringC++ L04-Array+String
C++ L04-Array+String
 
C++ L06-Pointers
C++ L06-PointersC++ L06-Pointers
C++ L06-Pointers
 
C++ L03-Control Structure
C++ L03-Control StructureC++ L03-Control Structure
C++ L03-Control Structure
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
ES6 - Next Generation Javascript
ES6 - Next Generation JavascriptES6 - Next Generation Javascript
ES6 - Next Generation Javascript
 
Python opcodes
Python opcodesPython opcodes
Python opcodes
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchained
 
C++ L07-Struct
C++ L07-StructC++ L07-Struct
C++ L07-Struct
 
C++ L01-Variables
C++ L01-VariablesC++ L01-Variables
C++ L01-Variables
 

Similar to Python decorators (中文)

DjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New RelicDjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New RelicGraham Dumpleton
 
Djangocon11: Monkeying around at New Relic
Djangocon11: Monkeying around at New RelicDjangocon11: Monkeying around at New Relic
Djangocon11: Monkeying around at New RelicNew Relic
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with GroovyArturo Herrero
 
Pydiomatic
PydiomaticPydiomatic
Pydiomaticrik0
 
Funkcija, objekt, python
Funkcija, objekt, pythonFunkcija, objekt, python
Funkcija, objekt, pythonRobert Lujo
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Pythonkwatch
 
User defined functions
User defined functionsUser defined functions
User defined functionsshubham_jangid
 
Currying and Partial Function Application (PFA)
Currying and Partial Function Application (PFA)Currying and Partial Function Application (PFA)
Currying and Partial Function Application (PFA)Dhaval Dalal
 
Testing My Patience
Testing My PatienceTesting My Patience
Testing My PatienceAdam Lowry
 
Python magicmethods
Python magicmethodsPython magicmethods
Python magicmethodsdreampuf
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scalapramode_ce
 
LinkedIn TBC JavaScript 100: Functions
 LinkedIn TBC JavaScript 100: Functions LinkedIn TBC JavaScript 100: Functions
LinkedIn TBC JavaScript 100: FunctionsAdam Crabtree
 
Attributes Unwrapped: Lessons under the surface of active record
Attributes Unwrapped: Lessons under the surface of active recordAttributes Unwrapped: Lessons under the surface of active record
Attributes Unwrapped: Lessons under the surface of active record.toster
 
Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)Rick Copeland
 
谈谈Javascript设计
谈谈Javascript设计谈谈Javascript设计
谈谈Javascript设计Alipay
 

Similar to Python decorators (中文) (20)

DevOps with Fabric
DevOps with FabricDevOps with Fabric
DevOps with Fabric
 
DjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New RelicDjangoCon US 2011 - Monkeying around at New Relic
DjangoCon US 2011 - Monkeying around at New Relic
 
Djangocon11: Monkeying around at New Relic
Djangocon11: Monkeying around at New RelicDjangocon11: Monkeying around at New Relic
Djangocon11: Monkeying around at New Relic
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
Python idiomatico
Python idiomaticoPython idiomatico
Python idiomatico
 
Chapter 02 functions -class xii
Chapter 02   functions -class xiiChapter 02   functions -class xii
Chapter 02 functions -class xii
 
2 Functions2.pptx
2 Functions2.pptx2 Functions2.pptx
2 Functions2.pptx
 
Funkcija, objekt, python
Funkcija, objekt, pythonFunkcija, objekt, python
Funkcija, objekt, python
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
User defined functions
User defined functionsUser defined functions
User defined functions
 
Currying and Partial Function Application (PFA)
Currying and Partial Function Application (PFA)Currying and Partial Function Application (PFA)
Currying and Partial Function Application (PFA)
 
Testing My Patience
Testing My PatienceTesting My Patience
Testing My Patience
 
Python magicmethods
Python magicmethodsPython magicmethods
Python magicmethods
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
 
LinkedIn TBC JavaScript 100: Functions
 LinkedIn TBC JavaScript 100: Functions LinkedIn TBC JavaScript 100: Functions
LinkedIn TBC JavaScript 100: Functions
 
Attributes Unwrapped: Lessons under the surface of active record
Attributes Unwrapped: Lessons under the surface of active recordAttributes Unwrapped: Lessons under the surface of active record
Attributes Unwrapped: Lessons under the surface of active record
 
Python : Functions
Python : FunctionsPython : Functions
Python : Functions
 
Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)Python Functions (PyAtl Beginners Night)
Python Functions (PyAtl Beginners Night)
 
谈谈Javascript设计
谈谈Javascript设计谈谈Javascript设计
谈谈Javascript设计
 

Recently uploaded

Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 

Recently uploaded (20)

Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 

Python decorators (中文)