[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/14 22:07 / Filesize : 221 KB / Number-of Response : 1031
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pythonのお勉強 Part51



1 名前:デフォルトの名無しさん [2015/10/01(木) 20:48:23.20 ID:zy2bldTw.net]
Pythonオフィシャルサイト
www.python.org/

日本Pythonユーザ会 (※英語わかる人は上記のオフィシャルの方を見ることをお薦めします)
www.python.jp/

Pythonのお勉強 Part50
peace.2ch.net/test/read.cgi/tech/1413474092/

92 名前:名無しさん@お腹いっぱい。 mailto:sage [2015/12/04(金) 13:42:24.68 ID:39adQu8a.net]
実践 Python 3が出てるじゃん
2014年米国Joltアワード受賞書だって、きゃーすごーい!!

なんだよハイパフォーマンスPythonってwwww 

93 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 07:34:38.62 ID:KAZ63vDF.net]
スクリプト言語にパフォーマンスを求めるって本末転倒だよな
スクリプト言語は、パフォーマンスを犠牲にすることで
言語の使い勝手を高めたものなのに

94 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 09:12:10.97 ID:HGRqjVZT.net]
小細工するより部分的にCで書いた方が1000倍速いもんね

95 名前:デフォルトの名無しさん [2015/12/05(土) 11:27:18.56 ID:pK0sc289.net]
Pythonの良いところはCとかDでのネイティブモジュールの書きやすさだね

96 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 14:36:12.77 ID:S901WGX4.net]
>>92
書き方のイロハを教えれ。

97 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 14:43:34.87 ID:ckYMWiJu.net]
イ. extern(C) PyObject *funcname(PyObject *self, PyObject *args, PyObject *kw){} な関数を作る
ロ. PyMethodDef[] methods = {{}, {}, ..., {0,0,0,0}}; 関数定義構造体を列挙した配列を用意
ハ. extern(C) PyMODINIT_FUNC initモジュール名(){ Py_InitModule3("モジュール名", &methods[0], docstr); }
基本はこれだけ
Node.js のネイティブ拡張より楽

98 名前:デフォルトの名無しさん [2015/12/06(日) 10:20:34.66 ID:H7MORAv1.net]
>>90
言語の使い勝手を高めてさらに速度も上がれば最強だろ

99 名前:デフォルトの名無しさん mailto:sage [2015/12/06(日) 22:13:06.30 ID:stzT4P/M.net]
多言語やってるとインデント文法が恋しくなる

100 名前:デフォルトの名無しさん mailto:sage [2015/12/06(日) 23:51:20.38 ID:5QHRQBcn.net]
endifとか書かされない限り、その辺に関してはどっちでも良いかなぁ、、、



101 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 00:11:40.35 ID:r2KBysZ4.net]
変数に$とか書かされない限りは気にならない

102 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 02:53:12.47 ID:iax6/k1z.net]
BASICかよw

103 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 06:46:31.44 ID:PFJ6xruc.net]
>>99
NBASIC 辺りで知識で語るなよ、爺い w

104 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 07:18:51.72 ID:ezXkVIgi.net]
>>98
ああ、あれもきついな。
selfは不思議なことに平気なんだけどな、、、

105 名前:デフォルトの名無しさん [2015/12/07(月) 23:54:44.69 ID:tK/YAdcv.net]
linuxの標準に含まれるのにあまり人気がないのはクソだという証拠ですよね

106 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 00:34:33.56 ID:VCOeEoWo.net]
tiobeだと4位だし
英語読めないジャップログラマーが忌避してるだけでそ

107 名前:デフォルトの名無しさん [2015/12/12(土) 17:58:59.31 ID:SJC180uJ.net]
水着とれないよ!ウワーン

108 名前:デフォルトの名無しさん mailto:sage [2015/12/12(土) 18:07:31.97 ID:Q3V9xzYz.net]
答え合ってるのに通らないなら
途中計算を10桁で揃えるよろし

109 名前:デフォルトの名無しさん [2015/12/12(土) 18:32:39.32 ID:SJC180uJ.net]
11桁にしたらできたー。ありがとうT-T
でもまるで納得いかないよ。どういうことなの?!

110 名前:デフォルトの名無しさん mailto:sage [2015/12/13(日) 00:19:35.68 ID:bjavXFXE.net]
水着の問題、キャストの性質を使って作ってみた
変態コードだけど

# coding: utf-8

N = int(input())

prod = 2
for n in range(3, N+1):
    prod *= n
    prod = int((str(int(str(prod)[::-1]))[:15])[::-1])

ans = int((str(int(str(prod)[::-1]))[:9])[::-1])
print(ans)



111 名前:デフォルトの名無しさん [2015/12/17(木) 05:27:18.77 ID:Z3E6FBSO.net]
とあるクラスCaを使うのだが、そいつの使用しているクラスCb.__init__()を書き換えたい。
方法として、以下2つ以外ある?
一般的にはどうやるものなの?
[1] class Cb1(Cb):して新しい__init()__を書く。それを使うclass Ca1(Ca):を書く。
[2] Cb.__init__ = new_Cb_init のように新しい__init__()で上書きする。

112 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 09:20:43.09 ID:Hr/jR6FU.net]
標準ライブラリのソースでも読めば分かるよ

113 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 11:08:59.02 ID:G4jh+gEv.net]
>>108
俺だったらCbの修正の余波がCaに波及しないようにする
Caのインスタンス生成時にCbのクラスかインスタンスを与える

class Cb:
 pass

class Cb1(Cb):
 pass

class Ca:
 def __init__(self, cbclass):
  self.cb_instance = cbclass()

a = Ca(Cb)
b = Ca(Cb1)

114 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 14:36:29.43 ID:kLliwXlu.net]
Python2はutf8で全部統一しないと駄目なんかな

115 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 00:14:00.16 ID:dGeVyz3f.net]
いまどきPython2使ってる奴は真性情弱か社畜。

116 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 01:03:32.90 ID:fcZM0c4A.net]
オラPython2には二度と戻りたくねぇーだぁ

117 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 07:44:31.73 ID:LZrdA820.net]
Lispとインターフェースあるのpython2だけなんだ

118 名前:デフォルトの名無しさん [2015/12/22(火) 20:10:55.97 ID:tWqVXRMf.net]
>>111
3への移行を考えるならUnicode

119 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 00:36:21.41 ID:W6FZGndo.net]
他の言語とは違って、インデントもプログラムの動作が変わるPythonは、
スレに書き込むのは大変だな。

120 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 02:04:26.92 ID:WAVtd5+o.net]
>>116が日本語使うほうが大変そうだよ…



121 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 12:23:12.04 ID:fFQ/w2TS.net]
>>117
おちけつ。

たぶん116はスレにコピペしてコードを書き込むのが難しいよね、と言ってるだけだと思うぞ

122 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 12:31:14.03 ID:fiB ]
[ここ壊れてます]

123 名前:TvI7H.net mailto: 1に「コード貼るときはideone使ってね」って書いておいたはずなのに
今は消えていることに気づいた
[]
[ここ壊れてます]

124 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 14:18:17.58 ID:R9gGmOmk.net]
>>118
落ち着くべきなのは君じゃね?
>>117 は、>>116 の変な日本語を揶揄してるだけでしょ

125 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 18:56:59.36 ID:f3OkJGUt.net]
Google のTensorflow
Python2でしか動かない

126 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 20:28:04.76 ID:W6FZGndo.net]
>>117 正しい日本語を書いてるのにおかしいと言いたいのかね。

127 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 20:47:02.47 ID:V/z/l48H.net]
小学校からやり直せ

128 名前:デフォルトの名無しさん [2015/12/23(水) 21:04:23.89 ID:2qdT6/2p.net]
>>122
何でそんな強気でいられるの。。

129 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 21:14:02.12 ID:fiBTvI7H.net]
安いプライドを掛けたくだらんやり取りだ

130 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 01:26:47.30 ID:TrbcLjcW.net]
だがそれがいい。



131 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 11:36:05.60 ID:vSlq18m6.net]
>>122
インデントも ×
インデントでも ⚪︎
正しくはないだろ

132 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 13:49:03.84 ID:FKdh3zdu.net]
インデントで動作が変わるPythonは
コードをスレに書き込むだけでも大変だな

こうですかわかりません><

133 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 15:40:03.29 ID:sybmR7b7.net]
俺はインデントを全角スペースに変えて貼ってるな
昔は半角スペースも2chでインデントされてなかったっけ?

134 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 15:47:21.89 ID:/M0x45Oy.net]
def QandA(unko):
  if unko:
    print("知るかよジジイ")
  else:
    print("ぐぐれカス")

135 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 12:30:20.14 ID:gNSCWmtn.net]
Effective Python、まさかのオライリーから来月発売。
翔泳社はどうした…。

136 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 17:05:32.05 ID:4Vn2xfZ9.net]
Python本出まくってるね
多分機械学習ブームの恩恵もあるんだろうけど国内でRubyのポジション奪いつつある

137 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 17:25:26.65 ID:YW3ntb+L.net]
科学技術計算でも使われてるしな。

138 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 17:28:32.60 ID:hK6V4eA3.net]
( ´,_ゝ`)

139 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 17:31:03.80 ID:F1QV8Mfz.net]
「入門 Python 3」の評価高いなぁー
これからの人はPython3から学習できていいね

Rubyは最初からノー眼中だったけど、噂を聞くと色々酷いよね
ウンコだよね、「日本人ならRuby」とか言う思考停止信者も気持ち悪かったよね

140 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 17:52:09.89 ID:hK6V4eA3.net]
python2 > 3以上に移行が進まんような気がする
string literalをmutableからimmutableにするって凄いだろ
正気とは思えない



141 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 21:48:21.27 ID:AmvhRHjB.net]
>>127
正しいに決まってるだろうが。
何で頭が狂ってるのかね。

142 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 23:17:12.13 ID:d7MUJDP1.net]
もうその話題はいいよ

143 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 01:14:24.32 ID:YkAjMKTE.net]
まだまだこれからですよ
ご期待ください

144 名前:デフォルトの名無しさん [2015/12/26(土) 10:18:33.13 ID:PvF8tuZ2.net]
昨日電車乗ってたら向かい側の席の中国人っぽいひとが
Pyccкий язык
とかデカい字でタイトルが書いてある本を読んでたので
Python本かと思って覗き込んでしまった

145 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 17:12:04.29 ID:yBhcja0m.net]
>>137
外人さん?
ネイティブでないなら日本語正しく使えなくたって別に恥ずかしいことじゃないよ。

146 名前:デフォルトの名無しさん [2015/12/27(日) 00:37:19.32 ID:XsdnO ]
[ここ壊れてます]

147 名前:368.net mailto: >>131
キターーーーー!!
この本も米アマゾンで評価高かったよね
[]
[ここ壊れてます]

148 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 00:47:57.47 ID:lUaowQZF.net]
>>141
お前の頭の狂いを何とかしろよ。
正しい日本語をおかしいと思うお前がおかしい。

149 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 16:38:05.32 ID:V9zzXkir.net]
比を簡単にする関数とかあったりしないですかね?
>>>ナントカ(12, 8, 6)
ナントカ(6,4,3)
みたいな感じのやつ

150 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:32:36.44 ID:wq2CCL/x.net]
pythonには、gcd のような最大公約数を求める関数は無いの?



151 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:56:44.79 ID:uOFb0UKL.net]
fractions.gcd(a, b)がある

152 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 18:48:56.16 ID:jO9dPfwY.net]
>>143
お前のことある意味尊敬するわ

153 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 19:34:45.08 ID:V9zzXkir.net]
g=gcd(gcd(a,b),c)
(a/g, b/g, c/g)
でよいのかな。
電卓みたいにさっと取り出して計算する用途にはちょっと文字数多いけどありがとう!

154 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 03:29:45.23 ID:xJa+2Ys1.net]
Matlab買えないからOctaveやろうと思ったけど
結局劣化でしか無いからpythonで数値計算やろうと思ってるが
間違ってないよね?

155 名前:デフォルトの名無しさん [2015/12/28(月) 03:32:44.17 ID:n1jTvgNv.net]
>>149
正解?

156 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 03:34:38.21 ID:xJa+2Ys1.net]
ならpythonに人生を捧げるわ

157 名前:デフォルトの名無しさん [2015/12/28(月) 12:15:24.42 ID:Y4DeX8w+.net]
>>144
numpyとかsympyとか

158 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 17:58:00.41 ID:G2stt517.net]
言語的には間違ってないと思うけど、
SimuLinkできなきゃ他の人と話にならないことない?
言語できる人はいいんだけど

159 名前:デフォルトの名無しさん [2015/12/28(月) 23:57:55.57 ID:oLzKVphy.net]
linuxに標準で入ってるpythonを使わず、わざわざrubyを使う池沼の意味が分からない

160 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 00:32:01.16 ID:ukqqFxZV.net]
そりゃ好きな言語・慣れた言語がrubyならそれを使う罠
Linuxに標準で入ってるPythonは2系が多いし
システム構築ツールとしてPythonが絡んでいる場合があって
下手に新版を入れるのも恐い



161 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 01:07:26.19 ID:Tk7GRC+0.net]
では python 2系を使えばいいのでは?
とはいえ、新人プログラマは新しいもの使いたがるだろうけれど。

162 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 06:53:37.91 ID:+VSAL/TD.net]
Anacondaで3を入れたよ。暮れから正月にかけてぼちぼちさわってみっかな。図書館でオライリーの入門Python3も借りたし。

163 名前:デフォルトの名無しさん [2015/12/29(火) 22:09:30.22 ID:Gn86aS5m.net]
自分でビルドしていれたらええやん

164 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 22:24:39.72 ID:NA8hl+pp.net]
>>155
ほとんどのLinuxで複数バージョン同時に入れられるだろ
例えば/usr/bin/pythonを実行したら2.6が動くけど、2.7と3.xを入れて、/usr/bin/python2.7やpython3, python3.4とかバージョン付きで別のバージョンを呼び分けできる、みたいに

165 名前:デフォルトの名無しさん [2015/12/29(火) 22:26:57.24 ID:Gn86aS5m.net]
ていうか、>>155ってpythonの入れ替えの話なん?
システム系とは別にpython3いれられる

166 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 22:39:22.35 ID:ukqqFxZV.net]
同じソフトの版違いを入れると煩わしいってだけだよ
python xxxx.py と打った時、3で動かしたかったのに2で動いちゃって
エラーになるとか面倒じゃん
便利すぎてシステム管理に採用されたのがPythonの悲劇だなあ

167 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 23:07:02.91 ID:Kwx+9ABw.net]
どうやら実際を知りもせずイメージだけで話してるようだね

168 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 23:12:00.22 ID:QfjogXKL.net]
これは素人臭い発言をしてベストプラクティスを引き出すってアレでしょ
あからさま過ぎてバレバレであるが

169 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 23:16:44.99 ID:ukqqFxZV.net]
いやいやマジだって
2との使い分けのために実行ファイル名をpython3とかにしたら
タイプ量が増えて面倒じゃん
自分はやっぱりpythonって打ちたい

170 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 23:18:29.86 ID:QfjogXKL.net]
できますよ
シェルのフックでpythonのエイリアスを切り替えるだけですし
自動でやるツールもあります



171 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 23:22:26.39 ID:SOQh1ej9.net]
python長くね?
p3とかにaliasしちゃえば?

172 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 23:23:53.50 ID:QfjogXKL.net]
他にはラッパを挟んで、最初は2で起動して、失敗したら3にフォールバックさせるとか
ちょっと頭を使えばいくらでもできるでちゅわ

173 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 23:47:54.79 ID:ouZXeBGT.net]
明示的は暗黙的より良い(The Zen of Pythonより)と意識改革をしておかないと
Pythonは今後あらゆる面であなたに不愉快な思いをさせると予想されます
オブジェクトを文字列に変換することすら、特殊なケースを除いて明示を求められます
そんな中、一文字のタイプを面倒くさいと考えるままで生きていけるでしょうか?
無理ですね

174 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 00:10:02.09 ID:GtD48BI5.net]
1文字余計に入力が必要なのはpython worldではなく、bash sphereなんだ…


しまった、マジレスしちまった!

175 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 09:11:36.73 ID:I//lg6pc.net]
#!/usr/bin/env python3

176 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 11:43:54.16 ID:Y9esFwyM.net]
>>167
さすがにそんなアホな解決策は要らんわ

177 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 12:57:38.69 ID:Jq3rckJ5.net]
賢い解決策は書きませんけど

178 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 13:20:15.81 ID:7m/NH3Ue.net]
pythonと打つのは苦にならないのに、1タイプ増えると苦しいとか抜かす
頭パッパラパーな奴の解決策なんて考える必要ないっしょw
時間の無駄無駄。
その虚弱な指を豆腐にぶつけて骨折してるといいね。

179 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 13:48:54.07 ID:Q+ZAoAOe.net]
前提がアホだから解決策もアホになるよね、そりゃあ

180 名前:デフォルトの名無しさん [2015/12/31(木) 10:38:29.29 ID:KKAqg1l1.net]
>>161
どうせ python3 でしか動かないなら
shebang に #!/usr/bin/python3 って書いとけよ

だれだよ #!/usr/bin/env python とか流行らせた馬鹿は



181 名前:デフォルトの名無しさん [2015/12/31(木) 13:22:03.34 ID:6VYBPGte.net]
>>175
/usr/local/binにしかない人はどうすれば?

182 名前:デフォルトの名無しさん mailto:sage [2015/12/31(木) 13:44:55.07 ID:2oyVb390.net]
じゃあ死ねよ
死ね

183 名前:デフォルトの名無しさん mailto:sage [2015/12/31(木) 13:53:44.20 ID:KKAqg1l1.net]
>>176
ln -s 汁

184 名前:デフォルトの名無しさん mailto:sage [2015/12/31(木) 19:55:50.48 ID:xdIQXsvm.net]
>>166
そういう人はそもそも self とかうざくてしょうがないだろうね。

185 名前:デフォルトの名無しさん mailto:sage [2015/12/31(木) 20:19:40.72 ID:6jpuja+H.net]
if test -f filename:
などとpythonでもないのについコロン付けてしまうのどうにかして欲しい。

186 名前:デフォルトの名無しさん [2015/12/31(木) 20:21:16.45 ID:KP9fkYAQ.net]
年の瀬に初心者あるあるとか要りませんから

187 名前:デフォルトの名無しさん [2015/12/31(木) 20:29:32.83 ID:qrFs5ku+.net]
では、来年の抱負でも語りましょう。
Pythonのconferenceに一度は行きます。
国内・国外問わず行きます。

188 名前:デフォルトの名無しさん [2016/01/01(金) 19:41:24.99 ID:RO/YvQE1.net]
>>178
それで良いなら、#!/bin/mypythonで良いじゃん

189 名前:デフォルトの名無しさん mailto:sage [2016/01/01(金) 22:12:59.50 ID:LUOZYrnw.net]
そうだね
何の問題もなかったね
何が問題だったんだろう?

190 名前:デフォルトの名無しさん mailto:sage [2016/01/02(土) 14:25:32.87 ID:0SH4qGeB.net]
頭だって



191 名前:デフォルトの名無しさん mailto:sage [2016/01/04(月) 20:10:47.74 ID:Iqg/T0jz.net]
それよりPEP 0498について

192 名前:デフォルトの名無しさん mailto:sage [2016/01/04(月) 23:11:57.75 ID:+FPCUnLW.net]
まずは君が仕様の内容を説明してくれ給え
英語読むのめんどくさい






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<221KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef