簡體   English   中英

Python-實現函數

[英]Python - Implementing Functions

我正在創建一個函數來檢查x大於y,如果不是,它將切換兩個值並返回它們。

def xGreater(x, y):
    if(y > x):
        x, y = y, x
    return x, y

我的查詢是在另一個函數中使用此函數的最佳方法是什么,我當前的代碼如下:

def gcd(x, y):
    x , y = xGreater(x, y)
    r = x % y
    while(r != 0):
        x, y = y, r
        r = x % y
    return y

我可以不簡單地調用xGreater(x,y)來更改x和y的值,而無需在前面添加x,y =嗎? 或者這僅在返回單個變量時才起作用。 謝謝!

我可以不簡單地調用xGreater(x,y)來更改x和y的值,而無需在前面添加x,y =嗎?

恐怕你做不到,因為xy是不可變的, xGreater()值傳遞給xGreater()

可以在某些特殊情況下完成此操作(例如,如果xy是兩個列表),但通常不能這樣做。

老實說,我會擺脫xGreater()而只是在gcd()進行交換:

def gcd(x, y):
    if y > x:
        x, y = y, x
    r = x % y
    ...

我個人認為這種方式的代碼更具可讀性。

不,整數是不可變的。 但是,您可以減少一個元組打包/拆包的實例:

def xGreater(x, y):
    return (y, x) if y > x else (x, y)

NPE有一個更好的解決方案,但我很無聊,想寫一些技巧

def gcd(x,y):
    minVal = y ^((x ^ y) & -(x < y))

    if ( minVal == y ):
        y = x ^ y  # Swapping values without a intermediate variable
        y = y ^ y  # This is highly inefficient to use.
        x = x ^ y  # But still kinda cool.

   return x % y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM