当前位置: 首页 > news >正文

Python基础—函数(Day9)

一、函数的定义

  • 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,'')

 

转载于:https://www.cnblogs.com/facestore/p/8664701.html

相关文章:

  • 移动开发平台 Flutter
  • Android事件分发机制详解
  • Python基础—文件操作(Day8)
  • 用编程来玩的游戏 CodeCombat 已全面开源
  • 下载编译 Android wear 源代码,尝试制作可穿戴设备功能
  • Python基础-字符串实例2
  • oracle经典书籍推荐
  • Android高仿糗事百科(含服务端)
  • MongoDB 被攻击风波未平,如何避免黑客入侵?
  • kubernetes监控:grafana plugins IN kubernetes
  • 使用Mybatis-Generator自己主动生成Dao、Model、Mapping相关文件
  • Python 学习(二)
  • suse的安装命令zypper,类似apt
  • tomcat 安装
  • maven 创建后报错
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CentOS6 编译安装 redis-3.2.3
  • const let
  • Django 博客开发教程 8 - 博客文章详情页
  • JS+CSS实现数字滚动
  • Service Worker
  • use Google search engine
  • 技术发展面试
  • 你不可错过的前端面试题(一)
  • 漂亮刷新控件-iOS
  • 删除表内多余的重复数据
  • 树莓派 - 使用须知
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 学习HTTP相关知识笔记
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • # Apache SeaTunnel 究竟是什么?
  • #define用法
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)为C# Windows服务添加安装程序
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ... 是什么 ?... 有什么用处?
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core WebAPI中封装Swagger配置
  • .Net IOC框架入门之一 Unity
  • .net与java建立WebService再互相调用
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Bean注解详解
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [Android] Amazon 的 android 音视频开发文档
  • [BeginCTF]真龙之力
  • [CentOs7]iptables防火墙安装与设置
  • [InnoDB系列] -- SHOW INNODB STATUS 探秘
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [Oh My C++ Diary]怎样用cmd运行exe控制台程序
  • [poj 2001]Shortest Prefixes [Trie]
  • [Python]Selenium-自动化测试