总结day7 ---- 函数的内容 ,初识,返回值,进阶(一)
内容大纲:
一: 函数识别
二: 函数的结构
三: 函数的返回值,
四: 函数的参数
五: 动态参数
六: 形参的顺序
七: 名称空间
八: 作用域
九: 加载顺序和取值顺序
十: 内置函数
十一: 关键字使用,global ,nonlocal
十二: 函数的嵌套初识
一:函数的初识别
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print(),len()等。但你也可以自己创建函数,这被叫做用户自定义函数。
二:函数的结构

#函数定义
def mylen():
"""计算s1的长度"""
s1 = "hello world"
length = 0
for i in s1:
length = length+1
print(length) #函数调用
mylen()

上面就是咱们写了一个函数,并且成功的调用了它。

定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。 def 是固定的,不能变,他就是定义函数的关键字。 空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。 函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能 括号:是必须加的,先别问为啥要有括号,总之加上括号就对了! 注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。 调用:就是 函数名() 要记得加上括号。
三:函数的返回值
咱们用len()方法时,得到的结果会赋值给一个变量,然后得到结果:
str_len = len('hello,world')
print(str_len)
但是咱们写的这个函数,并不会得到这样的结果,如何让他和len函数一样,有返回值呢?
那就是在函数的最后加上一个return,return 后面写你需要的返回值就可以了。
下面咱们重点研究return关键字的作用:
return关键字的作用
return 是一个关键字,这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”。
要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值
没有返回值
不写return的情况下,会默认返回一个None:我们写的第一个函数,就没有写return,这就是没有返回值的一种情况。
只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数。
return None:和上面情况一样,我们一般不这么写。
返回一个值
刚刚我们已经写过一个返回一个值的情况,只需在return后面写上要返回的内容即可。
返回多个值
可以返回任意多个、任意数据类型的值
返回的多个值会被组织成元组被返回,也可以用多个值来接收
小结:
return 只有两个作用:
1,结束整个函数。
2,给函数的执行者(调用者)返回值。
四:函数的参数:
>1 形参:
>>1:位置参数:按照位置参数, 与实参角度的位置重左至右,一一对应.
>>2:默认参数:给形参一个默认值,通常是比较常用的数值,但是可以改变,#注意形参一定要在位置的最后面.
默认参数陷阱:
def func1 (a,l=[]):
l.append(a)
return l
print(func1(22))
print(func1(66))
print(func1(33))
print(func1(44,[]))
>>>>
[22]
[22, 66]
[22, 66, 33]
[44]
>>3:万能参数*arg, **kwarg
可以接受所有的位置参数,关键字参数,
可以接受字典
>2 实参: :
>>1位置参数:必须与形参一直,从左至右一一对应.
>>2 关键字参数:一一对应即可,不需要对应位置
>>3 混合参数:两个同时存在
>>4 三元运算
>>>1
if 2 >1:
print('ok')
else:
print('no')
print('ok') if 2>1 else print('no') 以上两个式子相等
A1 if 条件 else A2
五:动态参数
def fun(*args,**kwargs):
print(args)
print(kwargs)
fun(1,2,3,4,'','',[123],sex='nan')
fun({'name':23,'age':'hehe'},eat='chi')
>>>
(1, 2, 3, 4, '', '', [123])
{'sex': 'nan'}
({'name': 23, 'age': 'hehe'},)
{'eat': 'chi'}
>*arg , **kwarg的魔性用法
>>
# * 的魔性用法。
# 在函数的定义时,* ** 代表聚合。
# 函数的执行(调用)时,* ** 代表打散。
def fun(*args,**kwargs):
print(args)
print(kwargs)
fun(*(1,2,3),*['a','b','c'],**{'name':'wangzi'},**{'age':36})
# 写一个函数:可以传多个列表,把列表里面的所有元素一个一个的添加到args里面。 def func(*args, **kwargs): # 在函数的定义时,* 代表聚合。
print(args) #(1,2,3,4,5,6,1,2,3) func(*[1,2,3],*(1,2,3),*'fdsaf') # 函数的执行(调用)时,* 打散。
六:形参的顺序问题
# 位置参数> *args> 默认参数> **kwargs
七:名称空间
# 全局名称空间:存放的是py文件中变量与值的对应关系
# 局部名称空间:临时存放的是函数体里面的变量与值的对应关系。
# 内置名称空间:内置函数,关键字等等。 print() input()
八:作用域
# 作用域:
# 全局作用域:内置名称空间,全局名称空间
# 局部作用域:局部名称空间
九:顺序问题
# 加载顺序:加载到内存的顺序
# 内置名称空间 ---> 全局名称空间 ---> (当函数执行时)局部名称空间
# 取值顺序(就近原则)
# LEGB 原则
# 局部名称空间 ---> 全局名称空间 ---> 内置名称空间
十:内置函数
# print(globals()) # 返回一个字典:包含全局作用域所有的内容
# print(locals()) # 返回一个字典:当前作用域的所有内容
十一:关键字的使用
# 关键字:global nonlocal
# global : 可以局部声明一个全局变量
# age = 46
# name = 'xxx'
# def func():
# global name
# name = 'alex'
# name = 'barry'
# func()
# print(name)
# 局部作用域不能对全局作用域的变量进行修改,只能引用。
count = 1
def func():
global count
count += 1
func()
print(count)
# 总结:
# global :
# 可以局部作用域声明一个全局变量
# 局部作用域不能对全局作用域的变量进行修改,只能引用,通过设置global可以修改。
# nonlocal : 只在python3x中 存在。
# 1,不能操控全局变量。
# name = 'alex'
# def func():
# nonlocal name
# print(name)
# func()
# 内层函数不能对外层函数的变量进行修改,只能引用。
# 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
# 并且引用的哪层,从那层及以下此变量全部发生改变。
def wrapper():
name = 'alex'
def inner():
nonlocal name #加上之后可以引用函数父级的变量
name += 'b'
# print(name)
print('', name)
inner()
print('', name)
wrapper()
>>>>>
1 alex
2 alexb
十二: 函数的嵌套初识
def func1():
print(1)
def inner():
print(2)
def inner2():
print(3)
print(4)
inner()
print(5)
func1()
>>>>
1
4
2
5
总结day7 ---- 函数的内容 ,初识,返回值,进阶(一)的更多相关文章
- c&c++函数的参数和返回值的传递终结版
c++函数的参数和返回值的传递方式有三种:值传递.指针传递和引用传递. 在这之前先看几个例子: 一, int a=10; int b=a; b+=10; 此时b是a的一个拷贝,改变b的值,a并不会受到 ...
- javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量
定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...
- 探寻main函数的“标准”写法,以及获取main函数的参数、返回值
main函数表示法 很多同学在初学C或者C++时,都见过各种各样的main函数表示法: main(){/*...*/} void main(){/*...*/} int main(){/ ...
- day11 python学习 函数的建立,返回值,参数
函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,如:发送邮件.计算出 [11,22,38,888,2]中的最大数等 ...
- Python——变量的引用和函数的参数和返回值的传递方式
变量的引用 在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址.我们用下面的程序来理解: a = 10 print(id(a)) a = 11 print(id( ...
- Python基础之函数参数与返回值进阶
参数作用:如果外界希望在函数内部处理数据,就可以将数据作为参数传入函数内部: 返回值作用:如果希望一个函数函数执行完成后,向外界报告函数的执行结果,就可以使用函数的返回值. 函数的返回值 进阶 利用元 ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
- 【Go入门教程3】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)
这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...
- 【Go入门教程5】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)
这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...
随机推荐
- mac下git push避免每次都输入用户名和密码的配置
参考链接:http://www.linuxdiyf.com/linux/18389.html 链接2:https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%8 ...
- TensorMask
原文地址:https://arxiv.org/pdf/1903.12174.pdf 论文阅读:http://www.zhenzhujue.cn/article-36456-1.html https:/ ...
- 282 expression and operations添加运算符
[抄题]: 给定一个仅包含数字 0 - 9 的字符串和一个目标值,返回在数字之间添加了 二元 运算符(不是一元)+, - 或 * 之后所有能得到目标值的情况. "123", 6 - ...
- C#使用Log4Net记录日志(转)
出处:http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html 第一步:下载Log4Net 下载地址:http://logg ...
- GIT checkout 和 reset 区别
git checkout -- file:撤销对工作区修改:这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file:这个命令改变的是工作区 git reset HEA ...
- Hadoop中Writable类之二
1.ASCII.Unicode.UFT-8 在看Text类型的时候,里面出现了上面三种编码,先看看这三种编码: ASCII是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西欧语言.它是现 ...
- JScript 对象 <|> JSON
<script type="text/javascript"> function test(){ var array = [{"id":1},{&q ...
- CocoaPods:library not found for -lPods
This is my first shot to write a blog in English. Enjoy! ;) CocoaPods is a popular way to control iO ...
- CentOS 7安装OpenVPN
命令很简单,但是网上似乎没资料,只有RHEL6以下的资料. 直接贴命令: 1 2 3 4 5 cd ~ wget http://swupdate.openvpn.org/as/openvpn-as-2 ...
- centos6.6 下安装mysql5.7
背景 没啥好说的,就是需要搭建自己的测试数据库跟研发的数据隔离开来,需要怼mysql 这个方法只适合mysql5.7 # mysql5.6的有差异 步骤 1. 确认线上mysql的版本 SELECT ...