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

时间:2012-10-10 15:45:34

标签: python

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

它应该像这样工作:

>>> dm(u'aubrey')
('APR', '')
>>> dm(u'richard')
('RXRT', 'RKRT')
>>> dm(u'katherine') == dm(u'catherine')
True

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

dm(x)==dm(y)

现在发生这种情况:

>>> 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

2 个答案:

答案 0 :(得分:6)

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

>>> type('foobar')
<type 'str'>
>>> type(u'foobar')
<type 'unicode'>
>>> 'foobar' == u'foobar'
True

只要您正在呼叫的功能接受您的输入,您就不需要u。例如:

x = u'richard'
dm(x)

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

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

要:

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

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

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

dm(unicode(x)) == dm(unicode(y))

答案 1 :(得分:3)

a = u'katherine'
b = u'catherine'

dm(a) == dm(b)