Как я могу сказать, является ли переменная Python строкой или списком?

У меня есть стандартная программа, которая берет список строк в качестве параметра, но я хотел бы поддерживать передачу в единственной строке и преобразование его к списку одной строки. Например:

def func( files ):
    for f in files:
        doSomethingWithFile( f )

func( ['file1','file2','file3'] )

func( 'file1' ) # should be treated like ['file1']

Как моя функция может сказать, были ли строка или список переданы в? Я знаю, что существует a type функция, но там "больше pythonic" путь?

2
задан 8 May 2009 в 05:04

7 ответов

Ну, нет ничего unpythonic о проверке типа. Однако если Вы готовы поместить маленькую нагрузку на вызывающую сторону:

def func( *files ):
    for f in files:
         doSomethingWithFile( f )

func( *['file1','file2','file3'] ) #Is treated like func('file1','file2','file3')
func( 'file1' )

Я утверждал бы, что это - больше pythonic в тот "явный, лучше, чем неявный". Здесь существует, по крайней мере, распознавание со стороны вызывающей стороны, когда вход уже находится в форме списка.

37
ответ дан 31 October 2019 в 05:10
if hasattr(f, 'lower'): print "I'm string like"
11
ответ дан 31 October 2019 в 05:10

Если Вы имеете больше контроля над вызывающей стороной, то один из других ответов лучше. У меня нет той роскоши в моем случае, таким образом, я обосновался на следующем решении (с протестами):

def islistlike(v):
   """Return True if v is a non-string sequence and is iterable. Note that
   not all objects with getitem() have the iterable attribute"""
   if hasattr(v, '__iter__') and not isinstance(v, basestring):
       return True
   else:
       #This will happen for most atomic types like numbers and strings
       return False

Этот подход будет работать на случаи, где Вы имеете дело со знать набором подобных списку типов, которые встречают указанные выше критерии. Будут пропущены некоторые типы последовательности все же.

6
ответ дан 31 October 2019 в 05:10

Хорошо поэтому в случае, если у кого-либо еще есть та же проблема, я нашел обходное решение:

я уничтожил обратную петлю ('lo') интерфейс, который появился при использовании ifconfig с командой 'sudo ifconfig lo вниз', который сразу привел к ping, проходящим снова. После перезагрузки интерфейс обнаружился снова, и все работало способ, которым он, как предполагалось. Никакая идея, где проблема на самом деле была, но эй она работает...

32
ответ дан 31 October 2019 в 15:10

Проблема была решена путем соединения использования sudo pppoeconf команда. Но соединение с помощью администратора сети было все еще грязно.

3
ответ дан 31 October 2019 в 15:10
  • 1
    Я просто сверился evtest на моем персональном ноутбуке, и конечно же, приложенные журналы клавиатуры KEY_SYSRQ несколько раз в секунду. Но that' s просто признак, isn' t это? Это прекращает происходить, если говорят, я открываю окно Chrome и затем изменяюсь на Наутилус. Почему это сделало бы это? – cst1992 15 July 2018 в 14:59

У меня есть та же проблема, и я еще не решил ее. Но я узнал что случилось.

я хотел бы некоторый совет специалиста к, но похоже, что FGLRX НЕ работает над Ubuntu 16.04 и последним 14.04 (5), потому что это не совместимо с последней версией XORG.

Вот объяснение:

Ubuntu 14.04.5/16.04/16.10 и графика AMD

Please Note: 14.04.5 brought with it Xorg 1.18, which is what causes the problem in 16.04 to begin with. Luckily, it is completely possible to downgrade Xorg to 1.16 (on 14.04), so you can still use fglrx. Read here.

мне на самом деле был нужен APK AMD для кодирования в OpenCL 2.0, таким образом, я предполагаю, что просто должен избежать драйверов AMD и найти другой способ установить OpenCL.

Одно предложенное решение на связанной странице:

Try out Oibaf's drivers.

They work for AMD, NVIDIA and Intel, so you can even try them out if you dislike NVIDIA's proprietary drivers or are hoping for more performance from your Intel card.
They support newer OpenGL and OpenCL versions, so stuff that depends on those will work.
They claim to be optimized, so you could see an real boost in performance.

драйвер Oibaf походит на большую замену к fglrx, и это, вероятно. Однако, если у Вас есть действительно недавняя карта AMD, можно хотеть испытать собственное предложение AMD.

11
ответ дан 31 October 2019 в 15:10
  • 1
    После этого я получаю сообщение ' Никакой Адаптер Wi-Fi Found' – Abbas 17 September 2018 в 04:39

Можно зафиксировать поврежденные зависимости с

sudo apt-get -f install
43
ответ дан 31 October 2019 в 15:10

Другие вопросы по тегам:

Похожие вопросы: