如何将变量传递给双变量电话功能

fre*_*ger 0 python

我已经下载了双联音电话功能:https://github.com/dracos/double-metaphone

它应该像这样工作:

>>> dm(u'aubrey')
('APR', '')
>>> dm(u'richard')
('RXRT', 'RKRT')
>>> dm(u'katherine') == dm(u'catherine')
True
Run Code Online (Sandbox Code Playgroud)

如何将变量传递给此函数?你总是在路上.我需要能够做到

dm(x)==dm(y)
Run Code Online (Sandbox Code Playgroud)

现在这是发生的事情:

>>> x='wal mart'
>>> y='wall mart'
>>> dm(x)==dm(y)
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
dm(x)==dm(y)
File "<pyshell#18>", line 6, in dm
st = ''.join((c for c in unicodedata.normalize('NFD', st) if unicodedata.category(c) != 'Mn'))
TypeError: normalize() argument 2 must be unicode, not str
Run Code Online (Sandbox Code Playgroud)

cdh*_*wie 6

u''是文字unicode字符串对象的语法,与常规str对象相比,它可以处理Unicode字符.

>>> type('foobar')
<type 'str'>
>>> type(u'foobar')
<type 'unicode'>
>>> 'foobar' == u'foobar'
True
Run Code Online (Sandbox Code Playgroud)

只要你正在调用的函数接受你的输入,你就不需要了u.例如:

x = u'richard'
dm(x)
Run Code Online (Sandbox Code Playgroud)

您收到TypeError,因为该函数需要unicode对象并且您正在传递它str对象.改变这些行:

x='wal mart'
y='wall mart'
Run Code Online (Sandbox Code Playgroud)

至:

x=u'wal mart'
y=u'wall mart'
Run Code Online (Sandbox Code Playgroud)

如果您将使用str对象,则可以unicode使用unicode()构造函数将它们转换为对象:

x='wal mart'
y='wall mart'

dm(unicode(x)) == dm(unicode(y))
Run Code Online (Sandbox Code Playgroud)