Python-制御文と関数

  • もし-のelif、他
  • にとって
  • 同時に
  • 機能
    • 関数の定義
    • 空の関数パス
    • 複数の値を返します。
    • 可変パラメータ*
    • キーワード引数**


制御文

もし - のelif - 他

例えば、ユーザの年齢を入力して、で、Pythonプログラムでは、年齢に基づいて異なるコンテンツを印刷if達成するための文:

1 
2
3
4
年齢= 20 
歳> = 18の場合:
プリント( 'あなたの年齢である'、年齢)
プリント( '大人')

Pythonのインデントは、ルールに従って、場合ifステートメント裁判官True、そうでない場合は、何もしない、print文が実行されるインデントの2行を置きます。

if追加しelseている場合ことを意味し、文をif判断ですFalse、実行していないifため、コンテンツをelseの実装:

1 
2
3
4
5
6
7
年齢= 3 
の場合、年齢> = 18:
プリント(「あなたの年齢である」、年齢)
プリント(「大人」)
他:
プリント(「あなたの年齢である」、年齢)
プリント(「ティーンエイジャー」)

少ないコロンを書くことがないように注意してください:

もちろん、上記の決意は、あなたが使用することができ、非常に荒れているelifより詳細な決意をするために:

1 
2
3
4
5
6
7
年齢= 3 
年齢> = 18の場合:
プリント( '大人')
年齢> = 6のelif
印刷( 'ティーンエイジャー')
他:
プリント( '子供')

elifあるelse if略語がより持つことができるelifので、if文の完全な形式は次のとおりです。

1 
2
3
4
5
6
7
8
<条件判定1>の場合:
<1つの行う>
のelif <条件2>:
<2行う>
のelif <条件3>は:
<3を行う>
他:
<4を行います>

ifそこ特性文が実行されるが、裁判官が上にある場合、それは、裁判官からダウンしているTrue残りの部分を無視する判断が実行された後、対応する文、elifおよびelseので、テストと次のプログラムの印刷理由を説明してくださいそれはですteenager

1 
2
3
4
5
6
7
年齢= 20 
の場合、年齢> = 6:
プリント( 'ティーンエイジャー')
年齢のelif> = 18:
プリント( '大人')
他:
プリント( '子供')

if判断条件はまた、このような書き込みとして、省略することができます。

1 
2
:Xの場合
、印刷( '真')

限り、x非ゼロ値、非空の文字列、他の非空リスト、それが決定されTrue、さもなければFalse


循環

Pythonのループ、2、あるリストやタプルの各要素の反復アウトが続い1はです...ループ内で、例を見て:

1 
2
3
名前= [「マイケル」、「ボブ」、「トレイシー」] 
名に名:
プリント(名)

ターン印刷におけるこのコードの実装では、names各要素の:

1 
2
3
マイケル・
ボブ・
トレイシー

だからfor x in ...サイクルの各要素が変数に割り当てられx、その後、ステートメントブロックのインデントを実行します。

第二のループがあれば条件が満たされるように、whileループであり、連続サイクル、条件が満たされていないループを抜けます。例えば、我々はすべての奇数番号100未満、whileループを使用して達成することができるの合計を計算します:

1 
2
3
4
5
6
和= 0 
、N = 99
、一方のn> 0:
合計=合計+ N
N = N - 2
プリント(和)

サイクル変数は、nそれがなるまで、減少し続ける-1時間を、もはや条件ループが終了しながら、満足していません。


機能

関数の定義

Pythonでは、関数を定義するために使用するdef順次関数名、丸括弧、大括弧および結腸パラメータを記述文を:、次に、関数の戻り値と、後退に機能ブロック体である書き込みreturnreturnステートメント。

空の関数パス

あなたは何もしないの定義は空の関数である必要がある場合は、使用することができpass文を:

1 
2
デフNOP():
パス

pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

pass还可以用在其他语句里,比如:

1
2
if age >= 18:
pass

缺少了pass,代码运行就会有语法错误。

返回多个值

函数可以返回多个值吗?答案是肯定的。

比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标:

1
2
3
4
5
6
7
8
9
10
import math

def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny

>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0

但其实这只是一种假象,Python函数返回的仍然是单一值:

1
2
3
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)

大专栏  Python-控制语句及函数来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。


默认参数

1
2
3
4
5
6
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s

则,我们调用power(5), 相当于调用 power(5, 2)。

1
2
3
4
>>> power(5)
25
>>> power(5, 2)
25

设置默认参数时,有几点要注意:

  • 一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面)

  • 二是如何设置默认参数。

    当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。


可变参数 *

要定义出这个函数,我们必须确定输入的参数。由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:

1
2
3
4
5
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

但是调用的时候,需要先组装出一个list或tuple:

1
2
3
4
>>> calc([1, 2, 3])
14
>>> calc((1, 3, 5, 7))
84

如果利用可变参数,调用函数的方式可以简化成这样:

1
2
3
4
>>> calc(1, 2, 3)
14
>>> calc(1, 3, 5, 7) // 区别少了 [] ()
84

所以,我们把函数的参数改为可变参数:

1
2
3
4
5
def calc(*numbers):   // 函数定义修改为  *numbers
sum = 0
for n in numbers:
sum = sum + n * n
return sum

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数:

1
2
3
4
>>> calc(1, 2)
5
>>> calc()
0

如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:

1
2
3
>>> nums = [1, 2, 3]
>>> calc(nums[0], nums[1], nums[2])
14

这种写法当然是可行的,问题是太繁琐,所以Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

1
2
3
>>> nums = [1, 2, 3]
>>> calc(*nums)
14

*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。


关键字参数 **

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:

1
2
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)

函数person除了必选参数nameage外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数:

1
2
>>> person('Michael', 30)
name: Michael age: 30 other: {}

也可以传入任意个数的关键字参数:

1
2
3
4
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

应用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def test(name, age, **kw):
print("name : " , name, " age = ", age ," other ", kw)
for k in kw:
#print(k, " = ", kw[k])

if k == 'addr':
print("addr = ", kw[k])
elif k == 'phone':
print("phone = ", kw[k])


if __name__ == '__main__':
test('lg', 12, addr='jn', phone='110')

>>phone = 110
>>addr = jn

或者:

1 
2
3
4
5
6
7
8
デフ人(名前、年齢、**キロワット):
キロワットの「都市」の場合:
#有都市参数
渡す
キロワットの「ジョブの場合:
#有仕事参数
パス
印刷(「名前」、名前、「年齢:」、年齢、 'その他:'、キロワット)

おすすめ

転載: www.cnblogs.com/lijianming180/p/12147621.html