Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中向函数传递参数_Python_Functional Programming - Fatal编程技术网

在Python中向函数传递参数

在Python中向函数传递参数,python,functional-programming,Python,Functional Programming,在一个简单的例子中,假设我有 class Car: def __init__(self, operation): self.operation = operation def change_wheels(car, wheel_type): ... def repair_brakes(car, brake_pads, brake_fluid): ... car_list = [Car(change_wheels), Car(repair_brakes)] def serv

在一个简单的例子中,假设我有

class Car:
  def __init__(self, operation):
    self.operation = operation

def change_wheels(car, wheel_type):
  ...
def repair_brakes(car, brake_pads, brake_fluid):
  ...

car_list = [Car(change_wheels), Car(repair_brakes)]

def service_car(car, wheel_type, brake_pads, brake_fluid):
  car.operation(???)

如何将所需参数传递给
操作
函数?

您可以提供
汽车
参数,如车轮类型、制动器类型等,并将汽车对象传递给函数,然后检索汽车参数。这些属性对应于每辆车,因为它们有不同的制动类型等。。。将这些对象传递给函数可以使以后更容易获得所需的参数

class Car:
    def __init__(self, wheel, brakes, operation):
        self.wheel     = wheel
        self.brakes    = brakes
        self.operation = operation

def change_wheels(car):
    print('Wheel', car.wheels)

def repair_brakes(car):
    print('Brakes', car.brakes)

car_list = [Car('Wheel type', 'Brake type', change_wheels), Car('Wheel type', 'Brake type', repair_brakes)]

for car in car_list:
    car.operation(car)

并非所有参数都已实现,这只是一个示例

不确定你想要什么,但是:

class Car:
  def __init__(self, operation):
    self.op = operation
  
  def __call__(self, *args, **kwargs):
    try: self.op(self, *args, **kwargs)
    except TypeError: print('Unsupported operation.')

def change_wheels(car, wheel_type):
  print('change_wheels()', wheel_type)

def repair_brakes(car, brake_pads, brake_fluid):
  print('repair_brakes()', brake_pads, brake_fluid)

car_list = [Car(change_wheels), Car(repair_brakes)]

def service_car(car, wheel_type, brake_pads, brake_fluid):
  #car.operation(???)
  car(wheel_type)
  car(brake_pads, brake_fluid)

for car in car_list: service_car(car, 'wt', 'bp', 'bf')

什么是
汽车操作
?你能提供一个最小的,可重复的例子吗?在Python中,可以以相同的方式调用所有可调用项。如果您在尝试调用
car.operation
时遇到异常情况,这是相关信息。请使用列表作为参数,并选择所需的值。澄清一下:您本质上是问如何推断可调用函数所需的参数数和/或如何将可变数量的参数传递给可调用函数?如果你能详细说明你的设计动机,这可能会有所帮助。@Brian为不够清晰表示歉意-我意识到我错过了将
Car
对象从
Car\u list
传递到
service\u Car
功能的步骤<代码>操作是一个函数(如
更改滚轮
),参数需要来自上下文。看起来不错。希望你能从发布问题的人那里得到反馈。@BalajiAmbresh谢谢!你的回答也很好,但我宁愿避免硬编码。经过几个额外的功能,它变得混乱!谢谢问题是
car\u list
是静态的,在我读入文本文件之前,参数是未知的,因此我将该文件归类为car类型。然后我想调用汽车上所需的维修操作,这取决于汽车的类型。我还从落选票中意识到,我的问题在细节上可能很糟糕。@LuigiPlinge是的,如果这是一件事,我会建议args/kwargs。顺便说一句,我建议在阅读文件后,像我一样将这些参数添加到car对象中。这样,您的代码保持良好的可读性。或者重新设计控件结构,以便在读取文件时创建对象。或者你接受了另一个答案,而这不是你想要的?@LuigiPlinge你能用文本文件内容和阅读过程的样本编辑你的问题吗,这样我就可以给我的答案添加一个有效的解决方案吗?如果我读对了,这个解决方案取决于传递的参数数量?不幸的是,我不能保证每个操作都会有所不同。您可以在构造时显式地传递您想要的任何操作(请参见
\uuu init\uuu()
)。它不在乎你以后将多少arg传递给操作:它们将聚集在*args和**kwargs中。(已编辑的代码,现在可能更清晰了。)但假设还有另一个操作需要1 arg,如
def change\u oil(car,oil)
。我将使用
wheel\u type
参数调用
change\u oil
。正确:在这种情况下,它将无法区分。