一、函数的定义

  • def 关键字,定义一个函数
  • my_len 函数名(书写规则与变量名一样)
  • def与函数名中间一个空格。
  • def与函数名中间一个空格。
  • 函数名():加冒号
  • 函数体
  • my_len()#函数的执行:函数名+()
函数是从上到下依次执行,将函数名加载到内存,函数体放到一个临时存储空间,见到函数名执行。
# li=[1,2,2,4,6,7,4,5]
# def my_len():
# count=0
# for i in li:
# count+=1
# my_len()

二、函数的返回值

return

1.在函数中遇到return结束函数。

def fun():
print(111)
return
print(222)
a=fun()
print(a)

执行结果:

111
   None

2.将值返回给函数的调用者。

1)无return 返回None

2)只写renturn None。

3)return 一个值,该值是什么就直接返回给函数的调用者,函数名()

def  mylen():
s1='hello world'
length=0
for i in s1:
length=length+1
return length
str_len=mylen()
print('str_len: %s'%str_len) 执行结果:
str_len: 11

4)return多个值,将多个值放到一个元组里,返回给函数的调用者

def fun():
return 1,2,[3,4],'guo'
print(222)
a=fun()
print(a) 执行结果:
(1, 2, [3, 4], 'guo')

三、函数的参数

1.实参

1)位置传参:按顺序一一对应。

def func(a,b,c):
print(a)
print(b)
print(c)
func(1,2,3) 1
2
3
#写一个函数功能比大小
def max_min(a,b):
if a>b:
return a
else:
return b
print(max_min(100,20))
#可以用三元运算符来写:
def max_min(a,b):
return a if a > b else b
print(max_min(100,20))

2)关键字传参:不按顺序,按关键字一一对应。

def max_min(a,b):
return a if a > b else b
print(max_min(b=200,a=100)) 200

3)位置和关键字混合传参:关键字参数在最后,位置一一对应。

def fun(a,b,c,d):
print(a)
print(b)
print(c)
print(d)
fun(1,2,c=3,d=4)
fun(a=1,b=2,3,4)#关键字参数在前面会报错

2.形参

1)位置传参:按顺序一一对应。

def func(a,b,c):
print(a)
print(b)
print(c)
func('ssdd',3,4)
ssdd
3
4

2)默认参数:传参则覆盖,不传则默认,默认参数在位置参数后面。

def func(a,b=22):
print(a,b)
func(11,33) #11 33 传参则覆盖原来的22 def func(a,b=22):
print(a,b)
func(11) #11 22 不传参默认原来的参数

3.动态参数(万能参数)

*args接收的是实参对应的所有位置参数,并将其放在元组中。

def func(*args):
print(args)
func(1,2,3,4,5,6) 执行结果:
(1, 2, 3, 4, 5, 6)

**kwargs将所有的关键字参数(无实参对应的关键字参数)放到一个字典中。

def func(a,b,c,**kwargs):
print(kwargs)
func(1,2,r=4,b1=5,c1=6,c=7) 执行结果:
{'c1': 6, 'r': 4, 'b1': 5}

形参的最终顺序:位置参数,*args,默认参数,**kwargs.

def func(a,b,c,*args,d='男',**kwargs):
print(a)
print(b)
print(c)
print(args)
print(d)
print(kwargs)
func(1,2,3,4,5,6,7,d='女',v=8,m=9,f=22)
执行结果:
1
2
3
(4, 5, 6, 7)

{'m': 9, 'v': 8, 'f': 22}

*的魔法运用:

1.在函数的调用执行时:

*+可迭代对象,代表打散list,tuple,str,dict(键),将元素一一添加到args。

**+字典,代表打散,将所有键值对放到一个kwargs字典里。

def func(*args):
print(args)
l1=[1,2,3,]
l2=[1,2,3,22,33,44]
tu=(1,2,3)
func(*'fgjjkkll')
func(*l1,*l2) #函数的调用
func(*tu)
func(*{'name':'guo','age':'18'})#键添加到args 执行结果:
('f', 'g', 'j', 'j', 'k', 'k', 'l', 'l')
(1, 2, 3, 1, 2, 3, 22, 33, 44)
(1, 2, 3)
('age', 'name')
def func(**kwargs):
print(kwargs)
dic1={'name1':'guo','age1':'18'}
dic2={'name':'tu','age':'45'}
func(**dic1,**dic2) 执行结果:
{'name1': 'guo', 'name': 'tu', 'age1': '18', 'age': '45'}

2.在函数定义时,*args,**kwargs代表的是聚合。

def func(*args,**kwargs):
print(args)
print(kwargs)
dic1={'name1':'guo','age1':'18'}
dic2={'name':'tu','age':'45'}
func(*[1,2,3,4,5],*'fghj',**dic1,**dic2) 执行结果:
(1, 2, 3, 4, 5, 'f', 'g', 'h', 'j')
{'age1': '18', 'age': '45', 'name': 'tu', 'name1': 'guo'}

练习题

编写名单文件

def Infor_entry(username,sex='男'):
with open('name_list',encoding='utf-8',mode='a') as f:
f.write('{}\t{}\n'.format(username,sex))
while True:
username=input('请输入姓名(男生以1开头):').strip()
if '1'in username:
username=username[1:]
Infor_entry(username)
else:
Infor_entry(username,'女')

最新文章

  1. Java面试常见问题汇总
  2. 038. asp.netWeb用户控件之六实现日期选择的用户控件
  3. QWidget设置为模态问题
  4. iOSTab bar
  5. css禁止双击dom节点被选中user-select:none
  6. asp.net中Timer定时器在web中无刷新的使用
  7. iOS缓存类的设计
  8. 在Windows上运行Spark程序
  9. Django 无名参数与有名参数
  10. 拥抱单页网站! jQuery全屏滚动插件fullPage.js
  11. git反悔
  12. Linux:OpenSUSE系统的安装
  13. Android学习笔记-事件处理
  14. [PHP]常量的一些特性
  15. c# 以换行(\r\n)拆分字符串
  16. 理解git的分支原理,更好地使用git
  17. 【BZOJ1030】【JSOI2007】文本生成器
  18. [CF1067D]Computer Game[凸包/斜率优化+倍增+矩阵乘法]
  19. Linux内核分析06
  20. VS默认的类前缀(访问控制符)是internal

热门文章

  1. PPT2010制作图片玻璃磨砂效果
  2. HDOJ1573X问题
  3. 【Java】java基础
  4. 【记录一个问题】一个golang中的BUG,为啥编译的时候无法发现,而单独跑测试用例就发现了
  5. 【记录一个问题】opencl的clGetPlatformIDs()在cuda 9下返回-1001(找不到GPU平台)
  6. JQ的使用
  7. ansible command和shell的区别
  8. window-server 服务器解决远程连接
  9. 创建一个python类 ,self init相关参数的简单介绍
  10. Supervisor多进程管理 异常自动重启 可视化管理