#基本形式:
def fun_name(arg):
Suite
Return [expression]
- 1.def:定义函数时的关键字
- 2.fun_name:函数名
- 3.arg:函数的参数名,传入不同的参数,返回值也不同,通过参数的传递使函数的功能得以实现。
- 4.Suite:实现函数功能的代码段
- 5.return:后面接的表达式就是函数的返回。
- 2.函数的调用
fun_name(arg) #函数名(参数)```
* 函数被调用后返回的就是`return`表达式的值。
* 函数调用时的参数要严格按照函数定义的时候的参数来进行传递。
* `Return` 后面接的是表达式,不能接赋值语句。
* 3.函数的参数
* 1.必备参数:(函数定义时)
函数的参数在定义时只有参数名,没有值,这种定义的方式使得函数调用时一定得传入参数才能够正常的调用函数。必备参数的个数和顺序必须是和定义时是一致的,除非调用时使用了关键字参数就可以改变参数顺序传入。
* 2.默认参数:(函数定义时)
函数的参数在定义时给出了初始值,这时参数在调用时如果不传入值给这个参数,函数就会使用定义时的默认值,如果传了值进来给这个参数,那么默认值就会被丢弃而使用你传进来的这个值。
* 3.关键字参数:(函数调用时)
关键字参数是指的在函数调用的时候,传参时把定义函数时参数名和对应的值一起传入函数中,这时传入的参数的顺序就不用考虑了。
* 4.不定长参数:(定义和调用都可以用)
注:函数在定义时不确定要传入的参数个数时使用(不确定要传入几个参数)
* `*args `代表元组,`args`是元组的名字,传入的值就是这个元组的元素,这种参数不接受关键字参数。
* `**kwargs `代表字典,`kwargs`是这个字典的名字,调用时使用关键字参数,把参数作为字典的元素,参数名为字典的键,参数值为字典的值。
这两种参数可以同时使用,但必须`*args`在前面,`kwargs`在后面,函数调用时要把直接传的值放在关键字参数的前面。
* `*args`和`**kwargs`也可以在函数调用时的使用。
当我们清楚了函数定义时参数的个数和顺序时,我们可以把需要传入的参数组合成元组,使用`*`+`元组名`进行传参来调用函数。
我们把需要传递进去的参数的参数名作为字典的键,参数的值作为字典的值,再把这个由需要传递的进去的参数组成的字典用**+字典名进行传参来调用函数
`注:调用函数时参数要根据函数定义时的参数的个数和类型进行值的传递时,一定要清楚在函数定义时参数是什么类型的参数,只有传进去的参数能与定义时相匹配才能正确的调用返回函数的返回值。`
```python
In [4]: def sum1(a):
...: s = 0
...: for i in a:
...: s += i
...: return s
...:
In [5]: sum1((1,2))
Out[5]: 3
#不定长参数
In [6]: def sum2(*arg):
...: s = 0
...: for i in arg:
...: s += i
...: return s
...:
In [7]: sum2(1,2,3,4)
Out[7]: 10
#给定一个任意的字符序列,
#将字符序列中的大写字母转换成小写,
#将小写字母转换成大写'''
#详细方法一
def fun(x):
list1 = list(x)#将输入的序列转换为列表
for i in range(0,len(list1)):#len(list1)为列表的长度,i为循环变量
if list1[i].islower():
list1[i]=list1[i].upper()#转换为大写
elif list1[i].isupper():
list1[i]=list1[i].lower()#转换为小写
return list1#返回转换后的列表
def converted_case(x):
try:
if type(x) == str:#如果是字符串,则将其通过join拼接起来
result = ''.join(fun(x))
else:
result = fun(x)
return result
except Exception as e:
print('出错的原因是:'+str(e))
#改进后的方法二:
def converted_case(x):
s = ''
for i in x: # for循环遍历传入的序列x
if i.isupper(): #如果某个元素i是大写的
s += i.lower() #将其转换为小写的
elif i.islower(): #如果某个元素i是小写的
s += i.upper() #将小写字母转换成大写的
else:
s += i #进行字符串的拼接
return type(x)(s)
#递归实现阶乘
In [1]: def factorial(n): #求n的阶乘
...: if n == 1:
...: return 1
...: else:
...: return factorial(n-1)*n
...:
In [2]: print("5的阶乘为" + str( factorial(5) ) ) #将结果转换为字符串拼接起来
5的阶乘为120
#给定一个任意的序列,对这个序列进行逆序输出
In [1]: def reversed_sequence(x):
...: if type(x) == str: #如果输入的数列是字符串
...: list1 = list(x) #将字符串转换为列表
...: list1.reverse() #列表的翻转方法
...: result = ''.join(list1) #将列表中的元素通过join拼接起来
...: else:
...: list1 = list(x) #将字符串转换为列表
...: list1.reverse() #列表的翻转方法
...: result = tuple(list1) #将转换后的列表转换回原来输入的元祖类型
...:
...: return result
...:
In [2]: reversed_sequence([1,2,3])
Out[2]: (3, 2, 1)
In [3]: reversed_sequence((1,2,3))
Out[3]:(3, 2, 1)
#优化后的代码
In [1]: def reversed_sequence(x):
...: list1 = list(x)# list1 = reversed(x)
...: list1.reverse()
...: if type(x) == str:
...: return ''.join(list1)
...: return type(x)(list1)
...:
In [2]: reversed_sequence([1,2,3])
Out[2]: [3, 2, 1]
In [3]: reversed_sequence((1,2,3))
Out[3]: (3, 2, 1)
#生成一个n以内能被m整除的列表,此处的n是整数,n,m让用户自己输入
In [8]: list1 = []#创建一个空的列表,用来存放被7整除的数
...: def fun(n,m):
...: for i in range(n):
...: if i % m == 0:# 从0开始,0也能被7整除
...: list1.append(i)
...: print('%s以内能被%s整除的数构成的列表: '%(n,m)+str(list1))#格式化打印输出
...: return list1
...: def run(n,m):
...: if n.isdigit():#如果n是整数
...: n = int(n) #将n转换为整形
...: if m.isdigit():
...: m = int(m)
...: fun(n,m) #调用函数fun()
...: else:
...: print('你输入的m不是整数,请重新输入')
...: else:
...: print('你输入的n不是整数,请重新输入')
...:
...: while True:#下面是一个比较简单的用户友好界面
...: print("----1.进入程序----")
...: print("----q.退出程序----")
...: print("----Q.退出程序----")
...: op = input('请选择输入一个操作数: ')#由用户自己输入操作数选择进入或退出程序
...: if op.isdigit():#如果输入的是数字
...: op = int(op)
...: if op == 1:
...: n = input('请输入一个范围的最大数n:')#由用户自己输入n
...: m = input('请输入一个除数m:')#由用户自己输入m
...: run(n,m)#调用run()函数
...: else:
...: print('输入有误,请重新输入')
...: elif op == 'q' or op == 'Q': #如果用户输入q或者Q则退出程序
...: exit(0)
...:
#运行结果
----1.进入程序----
----q.退出程序----
----Q.退出程序----
请选择输入一个操作数: 1
请输入一个范围的最大数n:20
请输入一个除数m:5
20以内能被5整除的数构成的列表: [0, 5, 10, 15]
----1.进入程序----
----q.退出程序----
----Q.退出程序----
请选择输入一个操作数:
网友评论