использовать случайные функции (питон) - PullRequest
3 голосов
/ 17 ноября 2009

Интересно, сможем ли мы сделать это в python, предположим, у нас есть 3 различные функции для обработки данных как это:

def main():
  def process(data):
     .....
  def process1(data):
     .....
  def process2(data):
     .....
  def run():
     test = choice([process,process1,process2])
     test(data)
  run()

main()

Можем ли мы выбрать одну случайную функцию для обработки данных? Если да, это хороший способ сделать это?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 17 ноября 2009

Отличный подход (за исключением некоторого упрощения в вашем коде скелета). Так как вы просите пример:

import random

def main():
  def process(data):
     return data + [0]
  def process1(data):
     return data + [9]
  def process2(data):
     return data + [7]
  def run(data):
     test = random.choice([process,process1,process2])
     print test(data)
  for i in range(7):
    run([1, 2, 3])

main()

Я сделал этот цикл 7 раз, чтобы показать, что каждый выбор действительно случайный, то есть типичный вывод может быть что-то вроде:

[1, 2, 3, 7]
[1, 2, 3, 0]
[1, 2, 3, 0]
[1, 2, 3, 7]
[1, 2, 3, 0]
[1, 2, 3, 9]
[1, 2, 3, 9]

(меняется случайным образом каждый раз, конечно; -).

3 голосов
/ 17 ноября 2009

Конечно, это!

Что приятно в Python, функции - это объекты первого класса, и на них можно легко ссылаться.

Подразумевается, что все три метода имеют одинаковое ожидание в отношении передаваемых им аргументов. (Это, вероятно, само собой разумеется).

1 голос
/ 17 ноября 2009

Просто используйте модуль случайных чисел в Python.

random.choice(seq)

Это даст вам случайный предмет из последовательности.

http://docs.python.org/library/random.html

0 голосов
/ 17 ноября 2009

Ваш код будет работать так же, как вы его написали, если вы добавите его в начало:

from random import choice

Или, я думаю, было бы немного лучше переписать ваш код следующим образом:

import random

def main():
  def process(data):
     .....
  def process1(data):
     .....
  def process2(data):
     .....
  def run():
     test = random.choice([process,process1,process2])
     test(data)
  run()

main()

Видение random.choice() в вашем коде проясняет, что происходит!

...