簡體   English   中英

如何在python中聲明變量類型,C風格

[英]how to declare variable type, C style in python

我是一名編程專業的學生,​​我的老師從 C 開始教我們編程范式,他說如果我用 python 交作業就可以了(作業更容易更快)。 我希望我的代碼盡可能接近純 C。
問題是:
我如何像在 C 中那樣在 python 中聲明變量的數據類型。例如:

int X,Y,Z;

我知道我可以在 python 中做到這一點:

x = 0
y = 0
z = 0

但這似乎需要做很多工作,而且它忽略了 Python 比 C 更容易/更快的重點。那么,這樣的最短方法是什么?
PS我知道你沒有在Python的大部分時間申報的數據類型,但我仍想做到這一點,所以我的代碼看起來盡可能多盡可能像同學們。

從 Python 3.6 開始,您可以聲明變量和函數的類型,如下所示:

explicit_number: type

或者對於一個函數

def function(explicit_number: type) -> type:
    pass

這篇文章中的這個例子: How to Use Static Type Checking in Python 3.6更明確

from typing import Dict

def get_first_name(full_name: str) -> str:
    return full_name.split(" ")[0]

fallback_name: Dict[str, str] = {
    "first_name": "UserFirstName",
    "last_name": "UserLastName"
}

raw_name: str = input("Please enter your name: ")
first_name: str = get_first_name(raw_name)

# If the user didn't type anything in, use the fallback name
if not first_name:
    first_name = get_first_name(fallback_name)

print(f"Hi, {first_name}!")

請參閱typing模塊文檔

編輯:Python 3.5 引入了類型提示,它引入了一種指定變量類型的方法。 此答案是在此功能可用之前編寫的。

沒有辦法在 Python 中聲明變量,因為 C 意義上的“聲明”和“變量”都不存在。 這會將三個名稱綁定到同一個對象:

x = y = z = 0

Python 不一定比 C 更容易/更快,盡管它可能更簡單;)

為了澄清您所做的另一項聲明,“您不必聲明數據類型” - 應該重申您不能聲明數據類型。 當您為變量賦值時,值的類型成為變量的類型。 這是一個微妙的區別,但仍然不同。

我很驚訝沒有人指出你實際上可以做到這一點:

decimalTwenty = float(20)

在很多情況下,輸入變量是沒有意義的,因為它可以隨時重新輸入。 但是在上面的例子中它可能很有用。 還有其他類似的類型函數,例如: int()long()float()complex()

簡單地說:在 python 中鍵入僅用於提示。

x: int = 0
y: int = 0 
z: int = 0

但是強類型和變量定義實際上是為了使開發更容易。 如果您事先沒有考慮過這些事情,那么您就不是在設計和開發代碼,而只是在進行黑客攻擊。

松散類型只是將復雜性從“設計/黑客”時間轉移到運行時間。

Python 中的一切都是對象,包括類、類實例、函數中的代碼、稱為模塊的函數庫,以及整數、浮點數、字符串等數據值或列表和字典等容器。 它甚至包括命名空間,它們是類似字典(或映射)的容器,用於跟蹤標識符名稱(字符串對象)和當前存在的對象之間的關聯。 如果兩個或多個標識符與同一個對象相關聯,則對象甚至可以有多個名稱。

將標識符與對象相關聯稱為“將名稱綁定到對象”。 這是 Python 中最接近變量聲明的東西。 名稱可以在不同的時間與不同的對象相關聯,因此聲明您將要附加的數據類型是沒有意義的——您只需這樣做。 通常它是在一行或一行代碼中完成的,它指定了對象的名稱和值的定義,導致它被創建,例如<variable> = 0或以def <funcname>開頭的函數。

這有什么幫助。

我使用數據類型來斷言 python 2 和 3 中的唯一值。否則我不能讓它們像 str 或 int 類型一樣工作。 但是,如果您需要檢查可以具有特定類型之外的任何類型的值,那么它們非常有用並且可以使代碼更好地閱讀。

示例:您可能希望使用條件或函數處理程序有條件地過濾或打印值。

from __future__ import print_function # for python2 & 3 to work
class unset(object):
    pass


def some_func(a,b, show_if=unset):
    result = a + b
    
    ## just return it
    if show_if is unset:
        return result
    
    ## handle show_if to conditionally output something
    if hasattr(show_if,'__call__'):
        if show_if(result):
            print("show_if("+ str(result) +")", result)
    elif show_if:
        print(show_if, " condition met ", result)
        
    return result
    
print("Are > 5)")
for i in range(10):
    result = some_func(i,2, show_if= i>5 )
    
def is_even(val):
    return not val % 2

print("Are even")
for i in range(10):
    result = some_func(i,2, show_if= is_even )

輸出

Are > 5)
True  condition met  8
True  condition met  9
True  condition met  10
True  condition met  11
Are even
show_if(2) 2
show_if(4) 4
show_if(6) 6
show_if(8) 8
show_if(10) 10

if show_if=unset是完美的用例,因為它更安全且show_if=unset好。 我也在枚舉中使用了它們,這在 python 中並不是真正的東西。

暫無
暫無

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

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