Re: Потрібна допомога
Виникло таке питання: якщо при створенні функції є змога створити анонімну (за допомогою lambda), то краще створити анонімну чи звичайну? Хоч анонімна буде швидшою, але мені здається, що звичайна краще читабельна.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Python → Потрібна допомога
Сторінки Попередня 1 2 3 4 5 6 … 9 Наступна
Для відправлення відповіді ви повинні увійти або зареєструватися
Виникло таке питання: якщо при створенні функції є змога створити анонімну (за допомогою lambda), то краще створити анонімну чи звичайну? Хоч анонімна буде швидшою, але мені здається, що звичайна краще читабельна.
По ситуації. lambda x: x**2 читається точно не гірше від def f(x): return x**2.
І анонімна не буде швидшою, принаймні, в сенсі швидкості виконання, радше навпаки.
Звичайна краще читається, що у неї вдала назва. Якщо назва виглядає як корисний коментар для цього рядка - тоді варто робити звичайну.
Створив прогу, яка редагує текстовий документ (зчитує всю інфу з txt, перетворює її в список, питає куди добавити, добавляє те, що введене в список, перетворює список в строку і записує все назад, стираючи попередню інфу)
def txt():
txt_input = input('Введіть назву текстового документу: ')
#ввести назву txt
txt_output = []
file = open(txt_input, 'tw')
for line in file:
txt_output.append(line.split())
print(txt_output)
txt_out = int(input('Введіть порядковий номер слова, після якого ви хочете додати свій текст: '))
#ввести номер слова від якого вставляти txt
txt_append = split(str(input('Введіть текст, який хочете додати: ')))
#що саме вставляти
txt_output.insert(txt_out, txt_append)
txt_output = sum(txt_output)
file.write(txt_output)
file.close()
x = int(input('Введіть 1 для того, щоб продовжити: '))
#ввести 1 щоб продовжити
while x == 1:
txt()
x = int(input('Введіть 1 для того, щоб продовжити: '))
#те ж саме
print('Це не 1, тому я завершую роботу.')
#завершую роботу
Ось, що вибиває:
Введіть 1 для того, щоб продовжити: 1
Введіть назву текстового документу: txt.txt
Traceback (most recent call last):
File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 20, in <module>
txt()
File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 2, in txt
txt_input = input('Введіть назву текстового документу: ')
File "<string>", line 1, in <module>
AttributeError: 'function' object has no attribute 'txt'
>>>
До першого запуску всі надписи були на українській. Потім чомусь стали ці карлючки. Що з ними робити мені не менш цікаво, ніж де проблема. На utf-8 це не схоже. Я звичайно можу знову написати українські фрази, але ж не після кожного запуску програми.
А на рахунок проблеми: я пробував замість імені файла вказувати його шлях до нього на компі - не допомогло.
І ще одне питання на рахунок того, як краще писати:
pow(x, y[, r]) чи ( x ** y ) % r
Що з них швидше обраховується і яке більш читабельне
І ще одне питання на рахунок того, як краще писати:
pow(x, y[, r]) чи ( x ** y ) % r
Що з них швидше обраховується і яке більш читабельне
То як на рахунок цього?
По проблемі: там чітко є спроба звернутися до функція.txt в рядку
txt_input = input('Введіть назву текстового документу: ')
Оскільки жодних спроб звернутися до будь-чого .txt тут немає і ви вводите 'txt.txt', єдине логічне припущення, яке я можу зробити - ви запустили це на другому Python і input намагається обчислити те, що ви ввели (txt.txt) як вираз Python, а оскільки функція txt не має ніяких атрибутів .txt, стається збій.
Що з них швидше обраховується і яке більш читабельне
Швидше, в принципі, перше (бо не обчислює числа x**y, а одразу залишок), але якщо для вас важлива швидкість, то ви обрали не ту мову.
Про читаність - гадаю, ви самі здатні відповісти на це питання.
По проблемі: там чітко є спроба звернутися до функція.txt в рядку
txt_input = input('Введіть назву текстового документу: ')
Оскільки жодних спроб звернутися до будь-чого .txt тут немає і ви вводите 'txt.txt', єдине логічне припущення, яке я можу зробити - ви запустили це на другому Python і input намагається обчислити те, що ви ввели (txt.txt) як вираз Python, а оскільки функція txt не має ніяких атрибутів .txt, стається збій.
Та ні ще раз перевірив це на 3 і знову видало помилку.
Python 3: https://ideone.com/7ifMrM
Python 2: https://ideone.com/9rDfo2
Де саме ваша помилка, кажете?
Python 3: https://ideone.com/7ifMrM
Python 2: https://ideone.com/9rDfo2
Ну і там і там помилка.
Де саме ваша помилка, кажете?
Я не знаю в чому помилка
Помилок може бути багато різних. Конкретно ви скаржилися на помилку "'function' object has no attribute 'txt'", пов'язану, найімовірніше, з тим, що ви запускали цей код у Python2. Якщо Python3 повідомляє про іншу помилку, і ви не розумієте, чому - то, будь ласка, скопіюйте сюди те, що вам видає інтерпретатор.
На ideone Python2 падає через ту саму помилку, яку ви вказали, а от Python3 - з Permission denied: 'txt.txt', тобто у програми немає дозволу на відкриття файлу txt.txt (що зрозуміло, цей онлайн-компілятор не призначений для роботи з файлами).
Помилок може бути багато різних. Конкретно ви скаржилися на помилку "'function' object has no attribute 'txt'", пов'язану, найімовірніше, з тим, що ви запускали цей код у Python2. Якщо Python3 повідомляє про іншу помилку, і ви не розумієте, чому - то, будь ласка, скопіюйте сюди те, що вам видає інтерпретатор.
На ideone Python2 падає через ту саму помилку, яку ви вказали, а от Python3 - з Permission denied: 'txt.txt', тобто у програми немає дозволу на відкриття файлу txt.txt (що зрозуміло, цей онлайн-компілятор не призначений для роботи з файлами).
Traceback (most recent call last): File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 20, in <module> txt() File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 2, in txt txt_input = input('Введіть назву текстового документу: ') File "<string>", line 1, in <module> AttributeError: 'function' object has no attribute 'txt'
Я точно запускав в 3-му, а не 2-му. Хіба що мені в неті підсунули 2-й під виглядом 3-го , але це навряд, бо функція інпат працює так як в 3-му.
input вимовляється "інпут" і в Python3 не виконує свого аргумента, відповідно, не виникає жодних "атрибутів 'txt'".
Зробив перевірку...
Ось код:
t = input('- ')
print(t)
t = int(t)
print(t)
Ось що вийшло:
>>>
RESTART: C:/Users/andry/AppData/Local/Programs/Python/Python36-32/practice/x.py
- name
name
Traceback (most recent call last):
File "C:/Users/andry/AppData/Local/Programs/Python/Python36-32/practice/x.py", line 3, in <module>
t = int(t)
ValueError: invalid literal for int() with base 10: 'name'
>>>
Зробив у тій же версії пайтону.
Тепер вірите?
У мене не виходить відтворити вашу помилку. Якщо з того часу ви перезапускали комп'ютер, то можете знову запустити той код і підтвердити, що лишається саме ця помилка - "AttributeError: 'function' object has no attribute 'txt'"?
У мене не виходить відтворити вашу помилку. Якщо з того часу ви перезапускали комп'ютер, то можете знову запустити той код і підтвердити, що лишається саме ця помилка - "AttributeError: 'function' object has no attribute 'txt'"?
Traceback (most recent call last):
File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 20, in <module>
txt()
File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 2, in txt
txt_input = input('Введіть назву текстового документу: ')
File "<string>", line 1, in <module>
AttributeError: 'function' object has no attribute 'txt'
>>>
знову...
мені здається що можливо програма просто не находить документ, хоча я пробував вказувати шлях до нього (але це лише припущення)
Видалив взагалі пайтон 2. Запустив ще раз. Тепер зовсім інша помилка...
Traceback (most recent call last):
File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 20, in <module>
txt()
File "C:\Users\andry\AppData\Local\Programs\Python\Python36-32\practice\txt_experiment.py", line 6, in txt
for line in file:
io.UnsupportedOperation: not readable
Але я не розумію як таке могло статися... Я на 99.9999% впевнений, що відкривав в 3-му (там інтерфейс інтерактивного вікна інший ніж в 2-му + ту прогу для перевірки я ж так само як і цю прогу запускав)
Я не знаю в чому була причина
Щось тут не так.
Як ви запускаєте обидва файли - однаково, через IDLE (чи консоль), чи по-різному, скажімо, один подвійним клацанням?