1+ #!/usr/bin/env python3
2+ # -*- coding: utf-8 -*-
3+ """
4+ 位置参数 (Positional Parameters)
5+
6+ 位置参数是函数中最基本的参数类型,参数的值根据位置顺序传递给函数。
7+ 调用函数时,参数必须按照定义时的顺序传递。
8+
9+ 学习目标:
10+ 1. 理解位置参数的概念
11+ 2. 掌握位置参数的定义和使用
12+ 3. 了解位置参数的特点和限制
13+ 4. 学会处理位置参数的常见问题
14+ """
15+
16+ # 1. 基本的位置参数
17+ def greet (name , age ):
18+ """
19+ 简单的问候函数
20+
21+ 参数:
22+ name (str): 姓名
23+ age (int): 年龄
24+ """
25+ print (f"你好,{ name } !你今年{ age } 岁了。" )
26+
27+ # 2. 多个位置参数
28+ def calculate_rectangle_area (length , width ):
29+ """
30+ 计算矩形面积
31+
32+ 参数:
33+ length (float): 长度
34+ width (float): 宽度
35+
36+ 返回:
37+ float: 矩形面积
38+ """
39+ area = length * width
40+ print (f"矩形面积:{ length } × { width } = { area } " )
41+ return area
42+
43+ # 3. 位置参数的顺序很重要
44+ def divide (dividend , divisor ):
45+ """
46+ 除法运算
47+
48+ 参数:
49+ dividend (float): 被除数
50+ divisor (float): 除数
51+
52+ 返回:
53+ float: 商
54+ """
55+ if divisor == 0 :
56+ print ("错误:除数不能为零!" )
57+ return None
58+
59+ result = dividend / divisor
60+ print (f"{ dividend } ÷ { divisor } = { result } " )
61+ return result
62+
63+ # 4. 位置参数与数据类型
64+ def format_person_info (name , age , height , is_student ):
65+ """
66+ 格式化个人信息
67+
68+ 参数:
69+ name (str): 姓名
70+ age (int): 年龄
71+ height (float): 身高(米)
72+ is_student (bool): 是否为学生
73+ """
74+ status = "学生" if is_student else "非学生"
75+ print (f"姓名:{ name } " )
76+ print (f"年龄:{ age } 岁" )
77+ print (f"身高:{ height } 米" )
78+ print (f"身份:{ status } " )
79+ print ("-" * 20 )
80+
81+ # 5. 位置参数的数量检查
82+ def add_three_numbers (a , b , c ):
83+ """
84+ 三个数相加
85+
86+ 参数:
87+ a (float): 第一个数
88+ b (float): 第二个数
89+ c (float): 第三个数
90+
91+ 返回:
92+ float: 三数之和
93+ """
94+ result = a + b + c
95+ print (f"{ a } + { b } + { c } = { result } " )
96+ return result
97+
98+ # 6. 位置参数与列表/元组
99+ def process_coordinates (x , y , z ):
100+ """
101+ 处理三维坐标
102+
103+ 参数:
104+ x (float): X坐标
105+ y (float): Y坐标
106+ z (float): Z坐标
107+ """
108+ print (f"坐标点:({ x } , { y } , { z } )" )
109+ distance = (x ** 2 + y ** 2 + z ** 2 )** 0.5
110+ print (f"到原点的距离:{ distance :.2f} " )
111+ return distance
112+
113+ # 7. 位置参数的实际应用示例
114+ def create_user_profile (username , email , phone , city ):
115+ """
116+ 创建用户档案
117+
118+ 参数:
119+ username (str): 用户名
120+ email (str): 邮箱
121+ phone (str): 电话
122+ city (str): 城市
123+
124+ 返回:
125+ dict: 用户档案字典
126+ """
127+ profile = {
128+ 'username' : username ,
129+ 'email' : email ,
130+ 'phone' : phone ,
131+ 'city' : city
132+ }
133+
134+ print ("用户档案创建成功:" )
135+ for key , value in profile .items ():
136+ print (f" { key } : { value } " )
137+
138+ return profile
139+
140+ # 8. 位置参数的错误处理
141+ def safe_divide (a , b ):
142+ """
143+ 安全的除法运算(带错误处理)
144+
145+ 参数:
146+ a (float): 被除数
147+ b (float): 除数
148+
149+ 返回:
150+ float or None: 运算结果或None(出错时)
151+ """
152+ try :
153+ if not isinstance (a , (int , float )) or not isinstance (b , (int , float )):
154+ print ("错误:参数必须是数字类型" )
155+ return None
156+
157+ if b == 0 :
158+ print ("错误:除数不能为零" )
159+ return None
160+
161+ result = a / b
162+ print (f"计算结果:{ a } ÷ { b } = { result } " )
163+ return result
164+
165+ except Exception as e :
166+ print (f"计算出错:{ e } " )
167+ return None
168+
169+ def main ():
170+ """
171+ 主函数:演示位置参数的各种用法
172+ """
173+ print ("=" * 50 )
174+ print ("位置参数演示" )
175+ print ("=" * 50 )
176+
177+ # 1. 基本位置参数使用
178+ print ("\n 1. 基本位置参数:" )
179+ greet ("小明" , 25 )
180+ greet ("小红" , 22 )
181+
182+ # 2. 计算矩形面积
183+ print ("\n 2. 多个位置参数:" )
184+ area1 = calculate_rectangle_area (5.0 , 3.0 )
185+ area2 = calculate_rectangle_area (10.5 , 7.2 )
186+
187+ # 3. 演示参数顺序的重要性
188+ print ("\n 3. 参数顺序的重要性:" )
189+ print ("正确顺序:" )
190+ divide (10 , 2 )
191+ print ("交换顺序:" )
192+ divide (2 , 10 )
193+
194+ # 4. 不同数据类型的位置参数
195+ print ("\n 4. 不同数据类型的参数:" )
196+ format_person_info ("张三" , 28 , 1.75 , True )
197+ format_person_info ("李四" , 35 , 1.68 , False )
198+
199+ # 5. 三个数相加
200+ print ("\n 5. 固定数量的参数:" )
201+ sum_result = add_three_numbers (10 , 20 , 30 )
202+ sum_result2 = add_three_numbers (1.5 , 2.7 , 3.8 )
203+
204+ # 6. 处理坐标
205+ print ("\n 6. 处理三维坐标:" )
206+ distance1 = process_coordinates (3 , 4 , 5 )
207+ distance2 = process_coordinates (1.0 , 2.0 , 2.0 )
208+
209+ # 7. 创建用户档案
210+ print ("\n 7. 实际应用示例:" )
211+ user1 = create_user_profile ("john_doe" , "john@email.com" , "13800138000" , "北京" )
212+ user2 = create_user_profile ("jane_smith" , "jane@email.com" , "13900139000" , "上海" )
213+
214+ # 8. 错误处理演示
215+ print ("\n 8. 错误处理:" )
216+ safe_divide (10 , 2 )
217+ safe_divide (10 , 0 ) # 除零错误
218+ safe_divide ("10" , 2 ) # 类型错误
219+
220+ # 9. 常见错误演示
221+ print ("\n 9. 常见错误演示:" )
222+ try :
223+ # 参数数量不匹配
224+ greet ("小明" ) # 缺少参数
225+ except TypeError as e :
226+ print (f"参数数量错误:{ e } " )
227+
228+ try :
229+ # 参数过多
230+ greet ("小明" , 25 , "额外参数" ) # 参数过多
231+ except TypeError as e :
232+ print (f"参数数量错误:{ e } " )
233+
234+ print ("\n =" * 50 )
235+ print ("位置参数要点总结:" )
236+ print ("1. 位置参数必须按照定义时的顺序传递" )
237+ print ("2. 参数数量必须完全匹配" )
238+ print ("3. 参数的位置决定了它们的含义" )
239+ print ("4. 位置参数是最基本的参数传递方式" )
240+ print ("5. 调用时不能省略任何位置参数" )
241+ print ("=" * 50 )
242+
243+ if __name__ == "__main__" :
244+ main ()
0 commit comments