[英]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}!")
編輯: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.