Python:我如何使用仅将其中一个字符串作为参数的函数来比较两个字符串?

Python: How would I compare two strings using a function with only one of the strings as an argument?

我创建了一个 class,但我不确定如何解决以下问题。是否可以创建一个函数来执行示例中的操作? (对于实际用途,如果日期和月份相同但年份不一定相同,我会比较日期并返回 true)

示例:

>>>strvar1 = 'abc-123'
>>>strvar2 = 'abc-456'
>>>strvar1.myfunction(strvar2)
True

Class代码

class Date(object):
     def __init__(self, x0 = 1900, y0 = 1, z0 = 1):
        self.x = x0
        self.y = y0
        self.z = z0
     def __str__(self):
        date = str(self.x) + "-" + str(self.y).rjust(2, '0') + "-" + str(self.z).rjust(2, '0')
        return date  
     def myFunction(j):

所以这个例子看起来像:

d1 = Date(1999, 1, 1) //d1 = "1999-01-01"
d2 = Date(2000, 2, 2) //d2 = "2000-02-02"
d3 = Date(2001, 2, 2) //d3 = "2001-02-02"

>>>d1.myFunction(d2)
False
>>>d2.myFuction(d3)
True

如果您尝试在方法调用之前执行比较,您可以使用三元运算符来评估条件,然后 return 您想要的变量。下面列出了一个例子,写在 JavaScript

var a = 1
var b = 2
myObj.myMethod( (a>b) ? a : b );

在上面的例子中,三元语法

(a>b) ? a : b

将评估 a 大于 b 然后 return a 如果为真否则如果 a 小于 b 它将 return b.

Ternary Wiki Link

在不懂语言的情况下,您可能需要查看 wiki 页面以了解您的语言的特定语法实现。

是的,这就是拥有 类 的原因。继续阅读 https://docs.python.org/2/tutorial/classes.html

 def myFunction(self, cdate):
     return self.y == cdate.y and self.z == cdate.z

基于 class 的方法没有任何问题,但是函数式编程也有一个解决方案,在部分函数中:

def make_has_same_month_day(d1):
    """return a function that takes a date
    and returns true if the month and day are the same as the enclosed date"""
    def has_same_month_day(d2):
        return d1.y == d2.y and d1.z == d2.z
    return has_same_month_day

这也可以写成functools.partial

from functools import partial
def same_month_day(d1, d2):
    """return true if both dates have the same month and day"""
    return d1.y == d2.y and d1.z == d2.z
has_same_month_day = partial(same_month_day, d1)