函数的返回值

# def func():
# return 'asfjsfda'
# res = func()
# print(res)

# 函数内要想返回给调用者值 必须用关键字return
"""
不写return
只写return
写return None
写return返回一个值
写return返回多个值
"""

# 不写return:函数默认返回None
# def func():
# print('hahaha')
# res = func()
# print(res)

# 只写return:return除了可以返回值之外 还可以直接结束整个函数的运行
# 只写return 返回的也是None(None就表示什么都没有)
# def func():
# l = ['jason','egon','tank']
# while True:
# for i in l:
# if i == 'egon': # 当i为egon的时候 直接结束函数运行
# # break
# return
# # print('asdasdkljlsjadl') # 这一行代码拥有都不会运行
# print(i)
# res = func()
# print(res)

# 写return None:跟上面的只写return是一样的
# def func():
# return None
# res = func()
# print(res)

# 写return返回一个值:这个值可以是python任意数据类型
# def func():
# return '123'
# def func1():
# return [1,2,3]
# def func2():
# return {'name':'jason'}
# def func3():
# return (1,)
# def func4():
# return {1,2,3,4,5}
# def func5():
# return True
# print(func(),func1(),func2(),func3(),func4(),func5())

# 写return返回多个值:return会自动将多个值以元组的形式返回给调用者
"""
1.为什么组织成元祖返回
函数不希望自己处理的结果被修改
2.如何不返回元祖

"""
def func():
return 1,2,3,4 # 返回的是(1, 2, 3, 4)
# res = func()
# print(res)

def func1():
return 'a','b','c' # ('a', 'b', 'c')
res = func1()
print(res)

def func2():
return [1,2,3],[1,2,3],[1,2,3] # ([1, 2, 3], [1, 2, 3], [1, 2, 3])
res1 = func2()
print(res1)

def func3():
return {'name':'jason'},{'username':'tank'},{'user_name':'egon'} # ({'name': 'jason'}, {'username': 'tank'}, {'user_name': 'egon'})
res2 = func3()
print(res2)

# 返回多个值 并且不想让return帮你做处理 自己手动加上你想返回的数据类型符号
def func4():
return [[1,2,3,4],[1,2,3,4],[1,2,34]]
res = func4()
print(res)

##

"""
positional arguments:位置参数
param 参数
required 需求的
"""

s = 'hello'
l = [1.2,3,4]
# print(len(s))
# print(len(l))

def my_len(args): # 需要0个参数
print(args)
n = 0
for i in args:
n += 1
return n
# res = my_len()
# print(res)
# my_len(l) # 给my_len传了一个参数
# my_len('asda')
print(my_len('hello'))
print(my_len('hello world'))
print(my_len([1,2,3,4,5]))

"""
函数参数的两大类型
形参:在函数的定义阶段 括号内写的变量名 叫做该函数的形式参数 简称 形参
实参:在函数的调用阶段 括号内实际传入的值 叫做实际参数 简称 实参

形参与实参的关系
形参就相当于变量名,而实参就相当于变量的值
函数调用传参的过程 就是给形参变量名赋值的过程

注意:形参和实参的绑定关系只在函数的调用阶段有效,函数运行结束关系自动解除
只在函数内部有效 函数外部无任何影响


函数的简易结构
def 函数名(形参1,形参2...):
'''函数的注释 用来描述该函数的作用以及各个形参的类型'''
函数体代码1
函数体代码2
...
return 函数的返回值

"""

def func(x,y):
"""
该函数的作用
:param x: 对形参x的解释
:param y: 对形参y的解释
:return: 对函数返回值的解释
"""
print('hahaha')
return 'heihei'

print(help(func))
print(help(len))

###

# 求两个数的大小 返回大的那个

# 位置参数:在函数定义阶段按照位置从左往右依次书写的变量名 叫做函数位置形参
# 位置形参在调用的时候 必须为其传值
def my_max(x,y):
print(x,y)
if x > y:
return x
else:
return y
# res = my_max(1) # 在调用函数的时候 少一个实参不行
# res = my_max(1,2,3) # 在调用函数的时候 多一个实参也不行

# res = my_max(20,10)

# 位置实参:在函数的调用阶段 传入的参数会按照位置一一对应给形参
# print(res)

# 第一种直接按照位置传 一一对应

# 第二种指名道姓的传 >>>:关键字传参
# my_max(y=20,x=10)
# my_max(10,y=20) # 位置和关键字混合使用
# my_max(20,y=40)
my_max(20,y=40,x=30)

"""
注意:在函数的调用阶段 位置参数和关键字参数可以混合使用
但是必须保证
1.位置参数必须在关键字参数的前面(越短的越靠前,越长的越复杂的越靠后)
2.同一个形参不能被多次赋值

"""
1.所有的函数都有返回值,无论你写不写return
python中所有的函数都有返回值 不写的情况下默认返回None

2.光写return 或者return None并不是为了考虑返回值 而是为了结束函数的运行

"""

# 默认值参数:在函数的定义阶段,形参(变量名)就已经被赋值了
# 在调用的时候可以不为默认值形参传值,默认使用定义阶段就已经绑定的值
# 在调用的时候如果可以给默认值形参传值 传了那么就使用你传的值
# 在定义阶段 默认值形参必须放在位置形参的后面

# def my_max(x,y=100):
# if x > y:
# return x
# return y
# # res = my_max(200)
# res1 = my_max(200,1000)
# res2 = my_max(y=200,x=1000)
# print(res2)

# def register(username,age,gender='male'):
# print(username,age,gender)
# register('jason',18)
# register('tank',28)
# register('egon',84)
# register('kevin',58)
# register('xiaohou',17,'female')

# 默认值参数的应用场景
# 当形参接收的到值比较单一的情况下 通常可以考虑用默认值形参

# def info(username,hobby,l=None):
# if l == None:
# l = []
# l.append(hobby)
# print('%s 的爱好是 %s'%(username,l))
# info('jason','study')
# info('tank','生蚝')
# info('kevin','喝腰子汤')
# info('egon','女教练')

# 解决方法1
# info('jason','study',[])
# info('tank','生蚝',[])
# info('kevin','喝腰子汤',[])
# info('egon','女教练',[])

# 解决方法2
# info('jason','study')
# info('tank','生蚝')
# info('kevin','喝腰子汤')
# info('egon','女教练')

"""
函数在定义阶段 内部所使用的变量都已经初始化完毕了
不会因为调用的位置的变化 而影响到内部的值(暂时可忽略)

函数无论在什么地方被调用
都会跑到函数定义阶段去执行代码
形参中用到的值都是往函数定义阶段代码往上找
"""

# 可变长参数
# 站在调用函数传递实参的角度 实参的个数不固定的情况
# 也就意味形参也不固定
# 站在形参的角度 可以用*和**来接收多余的(溢出的)位置参数和关键字参数

# 站在形参的角度 看 *
# 形参中的*会将多余的(溢出的)位置实参 统一用元组的形式处理 传递给*后面的形参名
# def func(x,y,*z):
# print(x,y,z) # z = (3, 4, 5, 6, 7, 8, 54, 43, 4, 5, 6, 6, 7, 8)
# func(1,2,3,4,5,6,7,8,54,43,4,5,6,6,7,8,)

# 站在实参的角度 看 *
# def func(x,y,z):
# print(x,y,z)
# # l = [1,2,3]
# # a,b,c = l
# # func(a,b,c)
# # func(*[1,2,3,4,5,6]) # *会将列表打散成位置实参一一传入等价于func(1,2,3,4,5,6)
# func(*(1,2,3)) # 等价于func(1,2,3)
# def func(x,*z):
# print(x,z)
# func(1,*{1,2,3}) # *在形参中只能接收多余的位置实参 不能接收关键字实参
# *只能将列表 元组 集合 字符串
# *的内部你可以看成是for循环

# 站在形参的角度看 **
# def func(x,y,**z):
# print(x,y,z) # z = {'z': 1, 'a': 1, 'b': 2, 'c': 3}
# func(x=1,y=2,z=1,a=1,b=2,c=3)
# **会接收所有多余的关键字参数 并将关键字参数 转换成字典的形式 字典的key就是关键字的名字
# 字典的value就是关键字的名字指向的值 将字典交给**后面的变量名

# 站在实参的角度看 **
def func(x,y,z):
print(x,y,z)
# func(12,3,4)
# func(x=1,y=2,z=3)
# d = {'x':1,'y':2,'z':333}
# func(x=1,y=2,z=3)
# func(**d) # 等价于func(x=1,y=2,z=333)
# **会将字典拆封成 key = value的形式

"""
总结 * 与 **
*在形参中能够接受多余的位置参数 组织成一个元祖赋值给*后面的变量名
**在形参中能够接受多余的关键字参数 组织成一个字典赋值给**后面的变量名


*:在实参中 *能够将列表 元祖 集合 字符串 打散成位置实参的形式传递给函数
(*就看成是for循环取值)
**:在实参中 能将字典打散成key = value的形式 按照关键字参数传递给函数
"""

# 需求 你写的函数 无论调用者按照正确传参的方式无论怎么传 你的函数都能够正常执行
# def func1(*x,**y):
# print(x,y)
# func1(1,2,3,4,5,6,x=1,y=2,z = 3)

"""
注意python推荐形参*和**通用的写法
"""
def func2(*args,**kwargs):
print(args,kwargs)
func2(1,2,3,4,5,6,x=1,y=2,z = 3)

py09函数简介的更多相关文章

  1. linux进程编程:子进程创建及执行函数简介

    linux进程编程:子进程创建及执行函数简介 子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system();    下面分别做详细介绍.(1)fork()    函数定 ...

  2. Linux Shell系列教程之(十五) Shell函数简介

    本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...

  3. 【液晶模块系列基础视频】4.5.X-GUI图形界面库-进度条等函数简介

    [液晶模块系列基础视频]4.5.X-GUI图形界面库-进度条等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址 ...

  4. 【液晶模块系列基础视频】4.4.X-GUI图形界面库-画tab函数简介

    [液晶模块系列基础视频]4.4.X-GUI图形界面库-画tab函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址 ...

  5. 【液晶模块系列基础视频】4.3.X-GUI图形界面库-画box函数简介

    [液晶模块系列基础视频]4.3.X-GUI图形界面库-画box函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址 ...

  6. 【液晶模块系列基础视频】4.2.X-GUI图形界面库-画矩形函数简介

    [液晶模块系列基础视频]4.2.X-GUI图形界面库-画矩形函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地址: ...

  7. 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介

    [液晶模块系列基础视频]4.1.X-GUI图形界面库-画线画圆等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地 ...

  8. [转]SQLITE3 C语言接口 API 函数简介

    SQLITE3 C语言接口 API 函数简介 说明:本说明文档属作者从接触 SQLite 开始认识的 API 函数的使用方法, 由本人翻译, 不断更新. /* 2012-05-25 */ int sq ...

  9. UNIX网络编程——epoll 系列函数简介、与select、poll 的区别

    前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...

  10. Loadrunner 脚本优化-事务函数简介

    脚本优化-事务函数简介 by:授客 QQ:1033553122 1.事务的开始和结束名称需要相同 lr_start_transaction(“transaction_name”); …//事务处理 l ...

随机推荐

  1. JavaSE学习笔记(一)----java基础

    本文来自博客园,作者:{张果},转载请注明原文链接:{JavaSE学习总结(一)--java基础} 一.Java是什么 Java 是由 Sun Microsystems 在 1995 年首先发布的编程 ...

  2. 跳板攻击之:Netsh端口代理转发

    跳板攻击之:Netsh端口代理转发 目录 跳板攻击之:Netsh端口代理转发 1 命令解析 2 代理转发内网22端口 3 代理转发外网4444端口 4 注意 1 命令解析 netsh interfac ...

  3. Map Inference in the Face of Noise and Disparity代码环境搭建

    1. 引言 地图生成算法网站Mapconstruction by pfoser里可以看到许多关于地图生成算法的介绍,Map Inference in the Face of Noise and Dis ...

  4. SQL常用命令使用方法

    (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * f ...

  5. Verilog设计指定寄存器数组在综合时使用block memory资源

    自己用verilog代码写的rom或ram会被综合成查找表LUT+REG构建,并没有使用到block memory资源. 资料:https://www.intel.com/content/www/us ...

  6. java struts2框架漏洞合集

    目录 struts2 s2-016 payload 数据包 返回结果 struts2 s2-016 参考:https://github.com/vulhub/vulhub/blob/master/st ...

  7. Word15 财务部年度报告office真题

    1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分.   2.这一步非常的简单,打开下载素材文件,在 ...

  8. 码云或github的"免费服务器"

    目录 一. 码云及工具介绍 二. 操作步骤 (1) 创建vue-cli项目 (2) 码云创建仓库 (3) 修改并提交项目到码云仓库 (4) 运行项目 (5) 注意点 三. 尾声 对于学生党来说,买个服 ...

  9. 在centos环境下利用docker安装kail

    配置好国内阿里云镜像 vim  /etc/docker/daemon.json {"registry-mirrors":["https://cq20bk8v.mirror ...

  10. 新发现的几个不错的c++库

    1.coost 包含了各种常用的库,比boost轻量级的基于c++11的库 https://github.com/idealvin/coost 2.ImGui 一个较少依赖的gui界面库 https: ...