Lesson1 組み込み関数前半　🍞

# タイトル
## 組み込み関数

組み込み関数とは
・・・インポートや定義しなくて利用できる関数のことです。つまり、デフォルトで元々Pythonに入っている関数のことです。出力でよく使うprint()も組み込み関数の一つです。

組み込み関数は全部で  **69個** ありますが、ここではよく使うもの**30個**について使い道と使い方を紹介します。



### abs

組み込み関数abs(x)は、数値ｘの**絶対値|x|を求める**関数です。
```引数```ｘに数値を渡すと、```返り値```としてその絶対値が帰ってきます。


```python

abs(-2)
# 実行結果　2
abs(5.8)
#　実行結果　5.8
```



引数のデータ型がint型（整数）の場合、返り値もint型になります。
同じ様に、引数のデータ型がfloat型（浮動小数点）の場合、返り値もfloat型になります。
余談ですが、似たようなメソッドでnp.abs()があります。
これも絶対値を求めるもので、numpyのメソッドになります。
[参考](https://srbrnote.work/archives/4612)

### all
組み込み関数all()は、リストやタプルなどといった**配列の全ての中身がTureであるかどうかを判別する**関数です。
>「*Tureである*」というのは、要素に「0以外の数字」もしくは「空白以外」が入っている場合です。

配列の要素全てがTrueである場合で、**True**を返し、それ以外は**Flase**を返す関数になります。
```引数```はリストやタプルなどの配列で、```返り値```はTrueもしくはFlaseのブーリアンです。

実際にどういうことか、見てみましょう。

```python
list1 = [56, 567, -45, 78] #判定対象
print('判定結果1:', all(list1))

 
list2 = [56, 567, 0, 78] #判定対象
print('判定結果2:', all(list2))


tuple1 = ('ピンク色', '', '黄緑色', '水色')
print('判定結果3:', all(tuple1))


```

```python:実行結果
#　判定結果1:True
#　判定結果；False　←(原因：０があったため）
#　判定結果: False　←空の要素があったため
```


All()関数を使用して、**Ture**と返ってきたら、その配列は**０以外の要素が一つ以上含まれいてる** ことを意味します。
逆に、**False**が返ってきた場合、0が含まれているもしくは空の要素が入っていることを意味しています。

💡``引数（判定対象）``は数字でも、文字列、イテレータブルオブジェクトでも可能です。

[参考](https://note.nkmk.me/python-all-any-usage/)

### any
組み込み関数any()は、リストやタプルなどの配列の**いずれか**の要素にTrueが含まれ場合、Trueと返し、一つもTureが含まれない場合は、Falseが返されます。

*all()関数と使い方は同じです*。


```python
list1 = [56, 567, 0, 78] #判定対象
print('判定結果1:', all(list2))


list2 = [0, 0, 0, 0]  #判定対象
print('判定結果2:', any(list2))

```

```python:実行結果
#　判定結果1:True　
#　判定結果2:False ←(原因：　list2の中身全てFalseになるため）
```

返り値が**True**の場合、**一つ以上はTrueがある**という事を意味します。
逆に**Flase**の場合は、**1つもTrueがない**(＝全てFlase)という事を意味します。

[参考](https://flytech.work/blog/21727/)

### chr
組み込み関数chr()は、Unicode値で整数を与えること、そのUnicodeに対応する文字を返す関数です。

>Unicodeとは
文字コードの国際的な業界標準の一つで、世界中の様々な言語の文字を収録して通し番号を割り当て、同じコード体系のもとで使用できるようにしたもの。Unicodeの97は「a」を表し、Unicodeの12354は「あ」を表します。
良く聞く、UTF-8とは別物なので注意しましょう。
（Unicodeは文字の集まりのことで、UTF-8はその文字の表現方法のことです）

よって、
```引数x```は整数で、```返り値```はUnicodeを反映した文字列になります。

```python
print(chr(65))

print(chr(0x41))#65の16進数は0x41になります

print(chr(2460))

```
```python:実行結果
# A
# A
# 2
```

💡Pythonでは、**0x**をつけると数値を16進数で記述できます。

この様に、Unicode値から文字を出力することができます。


```python:豆知識_顔文字も出力することができます
code = 0x1F600
while code <= 0x1F64F:
    ch = chr(code)
    print(ch, end='')
    code += 1
    if code % 0x10 == 0:
        print()
```
実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1895390/78fa5670-cbb2-3fc3-1be0-a8b25aae52ac.png)


逆に文字からUnicode値を出すこともできる**関数ord()**もあります。
[参考](’https://note.nkmk.me/python-chr-ord-unicode-code-point/’)

### enumerate
組み込み関数enumerate()は、指定した**配列の値のインデックス番号を取得する**関数です。
enumerateは「列挙する。数えていく」という意味です、それをイメージすると記憶に残りやすいです。

書き方は以下の通りです

```
enumerate(配列, 初期値)
```

``第一引数``＝**配列**などiterable  ：  シーケンス（リスト、タプル、文字列）や辞書、その他イテレータオブジェクト
``第二引数``＝**初期値**：インデックスの開始値（デフォルトはstart=0）

``返り値``は、enumerateオブジェクトです。
言葉だと難しいのでコードで見ていきましょう。

```python
l = ["a", "b", "c"]
print(list(enumerate(l)))
```

```python:実行結果
#[(0, 'a'), (1, 'b'), (2, 'c')]
#enumerateオブジェクトとして出力する時わかりにくいためList化している
```

実際よく使われるのはFor文の中です。

```python
for i, name in enumerate(l, 1):
    print(i, name)
# 1 Alice
# 2 Bob
# 3 Charlie

for i, name in enumerate(l, 42):#スタート位置を変更した
    print(i, name)
# 42 Alice
# 43 Bob
# 44 Charlie
```
[参考](https://hibiki-press.tech/python/enumerate/1017)

### eval
組み込み関数eval()は、文字列の **式**を渡すと、その実行結果が返ってくる関数です。
使い所としては、
通常は文字列は式として実行されないので、**文字列を受け取ってそれをそのまま実行したい時**に使います。意外とよく使います。

``引数``は文字式で、``返り値``はその実行結果です。
どのようなものか実行して見てみましょう。

```python
x = 2
eval('x+5')

eval("'my' + 'string'")


eval("print('Hello')")

```

```python:実行結果
#7
#'mystring'
#Hello
```

さらには、文字列から**リスト型や辞書型を作成した**りすることもできます。

```python
#リストの文字列からリストを作成
line = "[1,2,3,4,5]"
data = eval(line)  #リストが返される
print(data)
```
```python:実行結果
#[1,2,3,4,5]
```

**注意点：**  式ではなく(=や==など代入や演算子を使用する)**文**を指定するとSynataxErrorが発生します。（その場合は、exex関数を使用すると解決します）

```python:文はエラーが出る
eval('val = 2 + 3')#Error
eval('z==9')#Error
```
[参考](https://uxmilk.jp/19652)


### exec
組み込み関数exec()は、文字列の **文または式**を渡すと、その実行結果が返ってくる関数です。
一つ上のeval()関数と使い方と使い所はよく似ています。
eval() は式は実行できませんが、exec()では出来ます。

```python
eval('val = 2 + 3')#Error
exec('val = 2 + 3')#5
```
[参考](https://uxmilk.jp/19652)

### float

組み込み関数float()は、**数値または文字列型のデータを、浮動小数点数float型に変換する**関数です。
``引数``は、数値または文字列型のデータで、
``返り値``は、float型のデータになります。
次のように使います。

```python
print(float(15))

print(float("5.755"))

print(float())

```
```python:実行結果
#15.0
#5.755
#0.0
```
[参考](https://note.nkmk.me/python-str-num-conversion/)

### input

組み込み関数input()は、**キーボードからの入力を取得する**関数です。
AtCoderやPaizaなど競技プログラミングにおいて、
入力データが与えられる時に多く使用されます。

```python
x = input()
# 実行すると入力画面が出てくるので、abcと入力

print(val)
# abc

print(type(x))
#<class 'str'>
```

**注意** ：input()で所得したものは全て、**文字列型(str型)**のデータになることに注意しましょう。
所得した値を、数値のデータとして扱いたい時は、int()関数やfloat関数を使用します。


[参考](https://note.nkmk.me/python-input-usage/)

### int

組み込み関数int()は**文字列str型やfloat型のデータを、int型(整数)に変換する**関数です。

``引数``は文字列型のデータを渡し、``返り値``で整数型のデータが返ってきます、

```python
mystr = "1234"
print(int(mystr))

myflt = 0.1234
print(int(myflt))

```
```python：実行結果
#1234
#0
```

似たようなものとして**str(),float()**があります。
[参考](https://note.nkmk.me/python-str-num-conversion/)


### len
組み込み関数len()は、リストや文字列など、**オブジェクトの長さや要素数を所得する**関数です。
``引数``として、文字列型やリスト、タプル、セット、辞書型のデータなどを受け取ります。
``返り値``として、
文字列であればその文字数、
リスト・タプル・セット・辞書型の場合であれば、中身の要素の数が
**整数(int)型**で返されます。

```python
#リスト型の要素数の所得
l = [0, 1, 2]
print(len(l))


#タプル型の要素数の取得
t = (0, 1, 2,3)
print(len(t))


#文字列型の文字数を取得
s = 'abcde'
print(len(s))


```
```python:実行結果
# 3
# 4
# 5
```

for文を組み合わされて使うことが多いです。
例えば、リスト中身は使用しないが、リスト長さの回数分だけ繰り返したい時には以下のように使います。

```python:for分と一緒に使うrange
X = [0, 2, 4, 6]
 
for i in range(len(X)):
        print(i)

#実行結果
0
1
2
3
```



[参考](https://note.nkmk.me/python-len-usage/)


### list
組み込み関数list()は、受け取ったイテラブル（反復可能オブジェクト）をベースに、**リストを作成します**。

``引数``は、反復可能オブジェクト（文字列や、range関数の戻り値）
``返り値``は、リストになります。

```python
x = list('Python') 
print(x)

y = list(range(1:10))
print(y)

```

```python:実行結果
#[ 'P'、'y'、't'、'h'、'o'、'n']
#[1,2,3,4,5,6,7,8,9]

```
💡emp=list()といったように、引数を省略すると、空のリストが作成されます。
※emp=[]と同じ
あとからappendメソッドで追加していく時に、よく空のリストが使われます。

[参考](https://note.nkmk.me/python-list-tuple-convert/)

### map
組み込み関数map()は、配列などのイテラブルの**全要素に、同じ処理をする**ことができる関数です。
For文を使っても同じことができますが、コードが短縮され、シンプルに読みやすくなります。
書き方は次のようになります。

```python
  map(関数,  イテラブル)
```
``第一引数``＝イテラブルオブジェクトに適応させたい**処理**
``第二引数``＝**イテラブルオブジェクト（リストやタプルなど）**

``返り値``として、処理されたイテラブルが**マップ型で**戻ってきます。（printで出力できない）

```python
l = [-2, -1, 0]
print(map(abs, l))


def double(x):#やりたい処理を定義
  return x**2
list=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
map_list = map(double, list)
print(map_list)
 
#上を同じことするfor文
for_list=[]
for i in list:
  new_list.append(i**2)
print(for_list)
```

```python:
# <map object at 0x10651a400> ←実際は[2,1,0]になっている
#<map object at 0x7f0b055f8f50> ←実際は[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
```
**注意**:
map関数の``返り値``はリストではなくイテラブルな**mapオブジェクト** と呼ばれるものです。
ループ処理は可能なのですが、append等のリストのメソッドは使用できません。
また、print関数で出力しても、カンマ区切りの要素では表示されず、オブジェクトの型名が表示されるだけです。

**lamda式**や**input()関数**と一緒に使われることが多いです。
関数を毎回定義するのが面倒な時、lamda式（）を使用することで、一行に処理をまとめられます。

```python:
def double(x):
  return x**2
list=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
map_list = map(double, list)
print(map_list)

#上を同じ処理
#lamda式を使用すると関数を定義しなくてもよい
l = [-2, -1, 0]
print(list(map(lambda x: x**2, l)))
```
競技プログラミングにおいて、input()で受け取ったデータの形を変換させる時にもよく使われます。

```python
a=int(input())
b=int(input())
c=int(input())

#上３行をmap関数を使用することで次のようにまとめられる
a,b,c = map(int, input().split())
```


[参考](https://note.nkmk.me/python-map-usage/)