我正在测试python的singledispatch:https://docs.python.org/3/library/functools.html?highlight=singledispatch#functools.singledispatch
根据文档,A块应该用作B块。但是,如您在输出中所见,只有B块可以相应地工作。
这是什么问题??谢谢。
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/black"
android:elevation="@dimen/card_spacing_small"
android:focusable="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@android:color/transparent"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
app:contentInsetStart="0dp"
app:titleEnabled="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:gravity="start"
android:orientation="vertical"
android:padding="0dp"
android:visibility="@{viewModel.showCustomToolbar? View.VISIBLE : View.GONE}">
<TextView
android:id="@+id/title"
style="@style/ToolbarTitle.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:focusable="true"
android:gravity="left"
android:layout_alignParentTop="true"
android:text="@string/screen_name"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
style="@style/ToolbarTitle.Small"
android:layout_below="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:focusable="true"
android:gravity="left"
android:text="@{viewModel.balance}"
android:textStyle="normal" />
<ProgressBar
android:layout_alignParentBottom="true"
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_marginBottom="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"/>
</RelativeLayout>
</android.support.v7.widget.Toolbar>
输出:
from functools import singledispatch
# Block A
@singledispatch
def divider(a, b=1):
print(a, b)
@divider.register
def _(a: int, b=1):
print(a/b)
@divider.register
def _(a: str, b=1):
print(a[:len(a)//b])
divider(25, 2)
divider('single dispatch practice', 2)
# Block B
@singledispatch
def div(a, b=1):
print(a, b)
@div.register(int)
def _(a: int, b=1):
print(a/b)
@div.register(str)
def _(a: str, b=1):
print(a[:len(a)//b])
div(25 , 2)
div('single dispatch practice', 2)
答案 0 :(得分:0)
我正在测试python的singledispatch(...)这是什么问题?
使用类型注释是正确的,但是@singledispatch
仅使用since Python 3.7(注释是在Python 3.0中引入的,在3.4中引入了singledispatch)。因此
# works since 3.4
@foo.register(str)
def foo_str(a: str):
...
# works since 3.7
@foo.register
def foo_str(a: str)
...