静岡理工科大学 | 菅沼ホーム | 目次 | 索引 |
py -3 test.py [data] # [ ] 内はオプション
01 # -*- coding: UTF-8 -*- 02 def func(s1, s2 = 20, s3 = 30) : 03 """example of function""" 04 s = s1 + s2 + s3 05 s1 = 100 06 return s ---------------------------------- 07 # -*- coding: UTF-8 -*- 08 from function import func 09 import sys 10 print(func.__doc__) 11 p1 = 10 12 print("sum = ", func(p1)) # func(s1 = 10) or func(10) でも可 13 print("p1 = ", p1) 14 print("sum = ", func(p1, s2 = 50)) # func(10, 50) でも可 15 print(len(sys.argv), sys.argv[0]) 16 #print(len(sys.argv), sys.argv[0], sys.argv[1]) # オプションを付加した場合
example of function sum = 60 p1 = 10 sum = 90 1 test.py #2 test.py data
C++ の場合
// 通常の呼び出し 01 int func(int s1, int s2 = 20, int s3 = 30) 02 { 03 int s = s1 + s2 + s3; 04 s1 = 100; 05 return s; 06 } 07 int main() 08 { 09 int p1 = 10; 10 cout << "sum = " << func(p1) << endl; 11 cout << "p1 = " << p1 << endl; 12 cout << "sum = " << func(p1, 50) << endl; 13 return 0; 14 } ---------------------------------- // アドレス渡し 15 int func(int *s1, int s2 = 20, int s3 = 30) 16 { 17 int s = *s1 + s2 + s3; 18 *s1 = 100; 19 return s; 20 } 21 int main() 22 { 23 int p1 = 10; 24 cout << "sum = " << func(&p1) << endl; 25 cout << "p1 = " << p1 << endl; 26 cout << "sum = " << func(&p1, 50) << endl; 27 return 0; 28 } ---------------------------------- // 参照渡し 29 int func(int &s1, int s2 = 20, int s3 = 30) 30 // int func(const int &s1, int s2 = 20, int s3 = 30) 31 { 32 int s = s1 + s2 + s3; 33 s1 = 100; 34 return s; 35 } 36 int main() 37 { 38 int p1 = 10; 39 cout << "sum = " << func(p1) << endl; 40 cout << "p1 = " << p1 << endl; 41 cout << "sum = " << func(p1, 50) << endl; 42 return 0; 43 }
sum = 60 p1 = 10 sum = 90
sum = 60 p1 = 100 sum = 180
sum = 60 p1 = 100 sum = 180
[1] [1, 2] [1, 2, 3]
# -*- coding: UTF-8 -*- def func(a, lt = []) : lt.append(a) return lt ---------------------------------- # -*- coding: UTF-8 -*- from function import func print(func(1)) print(func(2)) print(func(3))
# -*- coding: UTF-8 -*- def func(a, sum = 0) : sum += a return sum ---------------------------------- # -*- coding: UTF-8 -*- from function import func print(func(1)) print(func(2)) print(func(3))
[1] [1, 2] [1, 2, 3]
01 # -*- coding: UTF-8 -*- 02 def func(a, lt) : 03 lt.append(a) ---------------------------------- 04 # -*- coding: UTF-8 -*- 05 from function import func 06 lt = [] 07 func(1, lt) 08 print(lt) 09 func(2, lt) 10 print(lt) 11 func(3, lt) 12 print(lt)
C++ の場合
// 配列の場合 01 void func(int *s, int n) 02 { 03 for (int i1 = 0; i1 < n; i1++) 04 s[i1] = i1 + 1; 05 } 06 int main() 07 { 08 int s[3]; 09 func(s, 3); 10 for (int i1 = 0; i1 < 3; i1++) 11 cout << s[i1] << " "; 12 cout << endl; 13 return 0; 14 } ---------------------------------- // vector クラスの場合 15 vector<int> func(int a, vector<int> s) 16 { 17 s.push_back(a); 18 return s; 19 } 20 int main() 21 { 22 vector<int> s; 23 s = func(1, s); 24 cout << s; 25 s = func(2, s); 26 cout << s; 27 s = func(3, s); 28 cout << s; 29 return 0; 30 } ---------------------------------- // vector クラスの場合(アドレス渡し) 31 void func(int a, vector<int> *s) 32 { 33 (*s).push_back(a); 34 } 35 int main() 36 { 37 vector<int> s; 38 func(1, &s); 39 cout << s; 40 func(2, &s); 41 cout << s; 42 func(3, &s); 43 cout << s; 44 return 0; 45 } ---------------------------------- // vector クラスの場合(参照渡し) 46 void func(int a, vector<int> &s) 47 { 48 s.push_back(a); 49 } 50 int main() 51 { 52 vector<int> s; 53 func(1, s); 54 cout << s; 55 func(2, s); 56 cout << s; 57 func(3, s); 58 cout << s; 59 return 0; 60 }
1 2 3
[1] [1, 2] [1, 2, 3]
[1] [1, 2] [1, 2, 3]
[1] [1, 2] [1, 2, 3]
01 # -*- coding: UTF-8 -*- 02 def add(s1, s2) : 03 s = s1 + s2 04 return s 05 def sub(s1, s2) : 06 s = s1 - s2 07 return s 08 def add_sub(fun, s1, s2) : 09 s = fun(s1, s2) 10 return s ---------------------------------- 11 # -*- coding: UTF-8 -*- 12 from function import add, sub, add_sub 13 print(add(2, 3)) # 5 14 kasan = add 15 print(kasan(2, 3)) # 5 16 print(add_sub(add, 2, 3)) # 5 17 print(add_sub(sub, 2, 3)) # -1
C++ の場合
int add(int s1, int s2) { int s = s1 + s2; return s; } int sub(int s1, int s2) { int s = s1 - s2; return s; } int add_sub(int (*fun)(int, int), int s1, int s2) { int s = fun(s1, s2); return s; } int main() { printf("%d\n", add(2, 3)); // 5 int (*kasan)(int, int) = &add; printf("%d\n", kasan(2, 3)); // 5 printf("%d\n", add_sub(add, 2, 3)); // 5 printf("%d\n", add_sub(sub, 2, 3)); // -1 return 0; } ---------- 以下,ラムダ式を使用した場合 ---------- int main() { auto add = [](int x, int y) { return x + y; }; auto sub = [](int x, int y) { return x - y; }; printf("%d\n", add(2, 3)); // 5 auto kasan = add; printf("%d\n", kasan(2, 3)); // 5 auto add_sub = [](auto sb, int x, int y) { return sb(x, y); }; printf("%d\n", add_sub(add, 2, 3)); // 5 printf("%d\n", add_sub(sub, 2, 3)); // -1 return 0; }
# -*- coding: UTF-8 -*- def kaijo(m) : if m > 1 : s = m * kaijo(m-1) # 自分自身を呼んでいる else : s = 1 return s ---------------------------------- # -*- coding: UTF-8 -*- from function import kaijo m = input("nの値を入力して下さい ") n = int(m) print(str(n) + "の階乗は=" + str(kaijo(n)))
C++ の場合
/**************************/ /* mの階乗 */ /* m : データ */ /* return : nの階乗 */ /**************************/ double kaijo(int m) { double s; if (m > 1) s = m * kaijo(m-1); // 自分自身を呼んでいる else s = 1; return s; } /********/ /* main */ /********/ int main() { double kai; int n; // データの入力 printf("nの値を入力して下さい "); scanf("%d", &n); // 階乗の計算 kai = kaijo(n); // 結果の出力 printf(" %dの階乗は=%f\n",n,kai); return 0; }
# -*- coding: UTF-8 -*- def func(*var, p) : print(var, p) # (10, 20) 30 を出力 ---------------------------------- # -*- coding: UTF-8 -*- from function import func func(10, 20, p = 30) # func(10, 20, 30) はエラー
C++ の場合
void func(vector<int> &s, int p) { cout << s; // [10, 20] を出力 cout << p << endl; // 30 を出力 } int main() { vector<int> s; s.push_back(10); s.push_back(20); func(s, 30); return 0; }
# -*- coding: UTF-8 -*- def func(**key) : print(key) # {'key1': 10, 'key2': 20} を出力 ---------------------------------- # -*- coding: UTF-8 -*- from function import func func(key1 = 10, key2 = 20)
C++ の場合
void func(map<string, int> &m) { cout << m; // {key1 : 10, key2 : 20} を出力 } int main() { map<string, int> m; m.insert(pair<string, int>("key1", 10)); m.insert(pair<string, int>("key2", 20)); func(m); return 0; }
# -*- coding: UTF-8 -*- def func(p1, p2 = 10, *var, **key) : print(p1, p2) # 1 5 を出力 print(var) # (100, 200) を出力 print(key) # {'key2': -2, 'key1': -1} を出力 ---------------------------------- # -*- coding: UTF-8 -*- from function import func func(1, 5, 100, 200, key1 = -1, key2 = -2)
01 # -*- coding: UTF-8 -*- 02 def func1() : 03 # print(str(a) + " in func1") エラー 04 a = 20 05 print(str(a) + " in func1") 06 07 def func2() : 08 global a # 記述しないとエラー 09 print(str(a) + " in func2") 10 a *= 10 11 print(str(a) + " in func2") 12 13 a = 10 14 print(a) 15 func1() 16 print(a) 17 func2() 18 print(a)
10 20 in func1 10 10 in func2 100 in func2 100
(式 for 式 in イテラブルオブジェクト) # for を多重に使用しても良い
>>> g = (pow(x, 2) for x in range(10)) >>> list(g) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> next(g) 0 >>> next(g) 1 >>> next(g) 4 ・・・・・ >>> list(g) # 要素を取り出した後は空 [] >>> sum(pow(x, 2) for x in range(10)) # 2 乗の和 285
C++ の場合
// for_each vector<int> v1 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; vector<int> v2; for_each(v1.begin(), v1.end(), [&v2](int x){ v2.push_back(x*x); }); for (auto x : v2) cout << " " << x; cout << endl; // 範囲 for 文 v2.clear(); for (auto e : v1) v2.push_back(e*e); for (auto x : v2) cout << " " << x; cout << endl;
>>> x = [1, 2, 3] >>> y = [4, 5, 6] >>> sum(x1 * y1 for x1, y1 in zip(x, y)) 32
C++ の場合
// inner_product vector<int> v1 {1, 2, 3}; vector<int> v2 {4, 5, 6}; auto x = inner_product(v1.begin(), v1.end(), v2.begin(), 0); cout << x << endl; // 範囲 for 文 pairp[] = {{1, 4}, {2, 5}, {3, 6}}; x = 0; for (auto e : p) x += e.first * e.second; cout << x << endl;
>>> page = ["aaa bbb ccc aaa", "aaa bbb ccc", "bbb aaa aaa"] >>> unique_words = set(word for line in page for word in line.split()) >>> unique_words {'aaa', 'ccc', 'bbb'}
C++ の場合
string page[] = {"aaa bbb ccc aaa", "aaa bbb ccc", "bbb aaa aaa"}; set<string> word; for (auto line : page) { int p1 = 0, p2 = 0; while (p2 >= 0) { // 単語に分割して set に追加 p2 = line.find_first_of(" \n", p1); word.insert(line.substr(p1, p2-p1)); if (p2 > 0) p1 = p2 + 1; } } for (auto e : word) cout << " " << e; cout << endl;
>>> def reverse(data, start) : ... for index in range(start, -1, -1) : ... yield data[index] ... >>> data1 = "abcde" >>> n = reverse(data1, 2) >>> next(n) 'c' >>> next(n) 'b' >>> for char in reverse(data1, 2) : ... print(char) ... c b a
静岡理工科大学 | 菅沼ホーム | 目次 | 索引 |