with open('/tmp/x') as f: print(''.join(sorted(f)))
readlines не нужен, файловые объекты уже сто лет как итераторы.
В Python 3 print функция, потому скобки, а операторам скобки не помеха, так что это обратно-совместимый пример.
Да. Есть такие. А есть те, кто удивляется, что в ЯП с си-подобным синтаксисом операция вызова функции _внезапно_ оформляется парой скобок. Вот уж невидаль, так невидаль, да. Это, конечно, проблема языка, что на нем пытаются писать, даже не зная его синтаксиса.
В некоторых случаях отсутствие необходимости ставить скобки при вызове методов улучшает читаемость кода, а также вкупе с другими фичами языка позволяет строить удобные и понятные DSL. Взять хоть тот же RSpec:
describe "Authentication" do
subject { page }
describe "signin page" do
before { visit signin_path }
it { should have_title 'Sign in' }
it { should have_header 'Sign in' }
context "with invalid information" do
before { click_button 'Sign in' }
it { should have_title 'Sign in' }
it { should_not have_link 'Profile' }
it { should_not have_link 'Settings' }
it { should_not have_link 'Users' }
it { should_not have_link 'Sign out', href: signout_path }
it { should have_link 'Sign in', href: signin_path }
it { should have_error_message 'Invalid' }
context "after visiting another page" do
before { click_link "Home" }
it { should_not have_error_message }
end
end
end
end
Кроме того, никто не запрещает ставить скобки, если уж если ты без них жить не можешь.
В некоторых языках за счет интроспекции это всего не нужно вообще, делаем скажем класс на питоне, наследующий некоторый библиотечный класс - получаем DSL.
import bindopt, sys
class AAA(bindopt.BASE):
def foo(self, a, b): #что то делаем
def bar(self): #еще что то делаем
aaa = AAA(param1=123, param2='qwe') #создаем экз. парсера
aaa(sys.argv[1:]) #разбираем аргументы командной строки
Фактически здесь создан DSL с ориентированным на баш синтаксисом, в неме есть команда foo (принимает два аргумента), bar (без аргументов), ну и можно еще задавать параметры param1 и param2. Поддерживается сокращение имен команд, чтение команд со стандартного ввода с реадлайн, встроенная справка и пр.
bindopt мой модуль, довольно замороченный, но очень удобно в итоге получилось. Любой может наваять что то подобное и юзать в свое удовольствие;-)
Это все конечно замечательно, но мне до сих пор непонятно, как это может упростить задачу тестирования (о чем, собственно, и был исходный вопрос). Я бы хотел бы увидеть аналог приведенного мной фрагмента (не реально существующий, а такой, который мог бы быть написан на идиоматическом питоне).