Python学习笔记三
一. 为什么要使用函数?
函数可以方便阅读代码。
函数可以减少重复代码。
函数可以减少管理操作,减少修改操作。
二. 函数分类:
内置函数:len() sum() max() min()
自定义函数:用户自己设定的函数
三. 函数定义语法:
def 函数名称(参数1,参数2,参数3) : 也可以不加参数
'''注释说明'''
函数体 也就是要执行的代码
return 返回值
例子:
def name():
x=1
print (x)
name()
结果:

四. 函数的使用规则:
先定义,后调用。
如果不定义,就调用,会有报错。相当于调用一个不存在的变量。
例子:

五. 函数在定义阶段只检查语法,而不执行代码,所以不会报逻辑错误。只会报语法错误。
六. 定义函数的三种方式:
无参数(如果函数无参数,那么调用函数的时候,也不用加参数)
例子:
def foo():
print('from foo')
bar() def bar():
print('from bar')
有参数(如果有参数,那么调用函数的时候必须要加参数,当函数体代码需要传入的值)
def auth(username,password):
空函数用来设计代码结构:
def a():
pass
使用了pass关键字
七. 如何调用函数?
在函数的后面加() ,表示调用函数。
先找到函数名,然后根据函数名执行里面的代码。
八. 函数返回值
无返回值 无return 返回None
例子:
def name():
print ('I love you !')
print(name())

可以看到返回的值为none.
返回一个值

因为我要求return 520,所以打印调用函数的返回值为520
返回多个值

可以看到返回的值放到了一个元组中。
注意:函数体中遇到return,函数执行代码就结束,并把return后面的值返回。函数体内可以有多个return,但是只执行一次。
return后面的值,可以是任意类型。返回是该值本身的数据类型。
return后面的值,如果是多个,用逗号分割开,并拼接成一个元组。
什么时候该有返回值?
调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值。
通常有参函数需要有返回值。
什么时候不需要有返回值?
调用函数,仅仅只是执行函数体代码,最后不需要得到什么结果,则无需返回值。
通常无参函数不需要返回值。
九. 调用函数的三种方式
常用的就是:函数名()
把函数的返回值赋值给一个变量
把函数的返回值放到一个数学表达式中。
例子:

十. 函数的参数
形参与实参
形参:定义函数的时候,出现在函数括号里面的参数就是形参,形参就是变量名
实参:调用函数的时候,出现在函数括号里面的参数就是实参,实参就是变量值
在调用阶段,实参才会绑定到形参,调用结束,绑定结束。
参数的类型:
位置参数:
位置形参:必选参数,多一个不行少一个不行,写几个形参,就必须有几个实参
位置实参:从左往右,一个一个传值给形参

位置实参换一下位置,就是下面的结果:

name=30,age='yangjianbo'
所以,位置参数就是从左到右传值,如果实参的位置颠倒,它依然还是从左到右传值。所以就需要下面的关键字参数,来配合位置参数使用。
关键字参数:指名形参的名称,采用key=value的方式。

那么位置实参跟关键字实参能不能混合使用呢?
第一种情况:

可以混合使用,第一个参数使用位置实参,后面两个使用关键字实参。
第二种情况:

第一个参数是关键字实参,第二个是位置实参,第三个是关键字实参,结果报错了,错误显示:位置参数在关键字参数的后面了。
也就是说:位置参数必须在关键字参数的前面,才有效果。
第三种情况:

我给name这个变量赋值两次,结果报错,错误显示:name变量得到了多个值,所以当位置实参和关键字实参混合使用的时候,要注意不能传多个值给一个变量。
默认参数:在定义阶段,已经为形参赋值。

报错了:非默认参数不能放在默认参数后面,意思就是说:如果定义阶段,默认参数一定要放在最后面,位置形参一定在默认参数的前面。
默认参数的值不可变类型。

使用默认参数:实参可以不用输入。
可变长参数:
*args
def a(x,y,z,*args):
print(x,y,z,args)
a(1,2,3,4,5)
输出的结果:
D:\Python36\python.exe F:/python/第一课/while-lianxi.py
1 2 3 (4, 5)
args的结果为元组。
**kwargs
def a(x,y,z,**kwargs):
print(x,y,z,kwargs)
a(x=1,z=3,y=88,a='aaaa',c=2)
结果:
D:\Python36\python.exe F:/python/第一课/while-lianxi.py
1 88 3 {'a': 'aaaa', 'c': 2}
# **的结果是字典。
def a(x,y,z,**kwargs):
print(x,y,z,kwargs)
a(x=1,z=3,y=88,**{'d':'aaaa','c':2})
D:\Python36\python.exe F:/python/第一课/while-lianxi.py
1 88 3 {'d': 'aaaa', 'c': 2}
命名关键字参数:
形参中,在*后面的参数就是命名关键字参数。
那么在传实参的时候,必须按照key=value的方式传值。
十一. 练习题
#判断用户输入的对象长度是否大于5
def duixiang(str):
if len(str)>5:
print("长度大于5")
else:
print("长度小于5")
duixiang((1,2,3,4))
#检查列表的长度,大于2,返回前两个元素的内容给调用者
x=[1,2,3]
def a(x):
if len(x)>2:
return(x[0:2])
else:
print("列表长度小于等于2")
y=a(x)
print(y)
结果:
D:\Python36\python.exe F:/python/第一课/while-lianxi.py
[1, 2]
十二. 函数对象
函数可以被引用
函数可以当作一个参数传给另外一个函数
函数当作一个返回值
函数可以当作一个容器的元素
十三. 函数嵌套
函数的嵌套调用:在调用一个函数的过程中,又调用了一个函数。
函数的嵌套定义:在定义一个函数的过程中,又定义了一个函数。
十四. 名称空间与作用域
名称空间:存放名字与值绑定关系的地方(内存)
内置名称空间:内置的名字与值的绑定关系
什么时候生效:python解释器一开始
什么时候失效:python解释器一关闭
全局名称空间:文件级别的名字与值的绑定关系
什么时候生效:执行python文件的时候生效
什么时候失效:执行完python文件的失效
局部名称空间:函数内部定义的名字与值的绑定关系
什么时候生效:调用函数的时候,临时生效
什么时候失效:函数调用结束
加载顺序:先内置,再全局,最后局部
LEGB查找名字顺序:先局部,再全局,最后内置
例子:
十五. 作用域:
全局作用域:内置名称空间名字与全局名称空间的名字 使用函数globals()查看,结果存放在字典中。
print(dir(globals()['__builtins__']))
全局存活,全局有效
局部作用域:包含局部名称空间的名字 使用函数locals()查看,结果存放在字典中。
def name():
y=111
print(locals())
name()
结果:
C:\Users\yangjianbo\AppData\Local\Programs\Python\Python36\python.exe C:/Users/yangjianbo/PycharmProjects/untitled/第四课函数高级应用/函数对象.py
{'y': 111}
def name():
y=111
# print(locals())
print(globals())
name()
结果:
C:\Users\yangjianbo\AppData\Local\Programs\Python\Python36\python.exe C:/Users/yangjianbo/PycharmProjects/untitled/第四课函数高级应用/函数对象.py
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002240EE2B198>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:/Users/yangjianbo/PycharmProjects/untitled/第四课函数高级应用/函数对象.py', '__cached__': None, 'name': <function name at 0x000002240EAD3E18>}
临时存活,局部有效
作用域关系,在函数定义时,就已经固定了,与调用位置无关。
十六. 关键字
global
在局部作用域修改全局作用域的变量值。
例子:
x=10
def name():
x=100
name()
print(x)
# x=100在局部作用域内有效,虽然执行了函数,但是在全局作用域的x的值,依然是x=10,要想让x=100,必须在函数内部添加一个关键字global x=10
def name():
global x
x=100
name()
print(x)
作业示例分析:
https://www.cnblogs.com/JayeHe/p/6846524.html
Python学习笔记三的更多相关文章
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- webdriver(python) 学习笔记三
知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...
- python学习笔记三--字典
一.字典: 1. 不是序列,是一种映射, 键 :值的映射关系. 2. 没有顺序和位置的概念,只是把值存到对应的键里面. 3. 通过健而不是通过偏移量来读取 4. 任意对象的无序集合 5. 可变长,异构 ...
- python学习笔记(三)、字典
字典是一种映射类型的数据类型.辣么什么是映射呢?如果看过<数据结构与算法>这一本书的小伙伴应该有印象(我也只是大学学习过,嘻嘻). 映射:就是将两个集合一 一对应起来,通过集合a的值,集合 ...
- Python学习笔记三:模块
一:模块 一个模块就是一个py文件,里面定义了一些业务函数.引用模块,可以用import语句导入.导入模块后,通过 模块.函数名(参数) 来使用模块中的函数.如果存在多个同名模块,则前面模块名需要加 ...
- python学习笔记(三)高级特性
一.切片 list.tuple常常截取某一段元素,截取某一段元素的操作很常用 ,所以python提供了切片功能. L=['a','b','c','d','e','f'] #取索引0,到索引3的元素,不 ...
- python学习笔记(三):文件操作和集合
对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 文件基本操作: f = open('file.txt','r') #以只读方式打开一个 ...
- python学习笔记三:函数及变量作用域
一.定义 def functionName([arg1,arg2,...]): code 二.示例 #!/usr/bin/python #coding:utf8 #coding=utf8 #encod ...
- python学习笔记(三)-列表&字典
列表: 一.列表操作"""Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素.比如,列出班里所有同学的名字,就可以用一 ...
随机推荐
- java的List列表转成Tree(树形)结构列表
直接看借鉴博客:https://blog.csdn.net/massivestars/article/details/53911620/ 由于我的业务没有父子级id两个字段,只有一个层级id字段来分层 ...
- SpringCloud入门(一)
一.微服务概述 1.什么是微服务 目前的微服务并没有一个统一的标准,一般是以业务来划分将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事. 与微服务相对的叫巨石 ...
- python之pymongo
引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. MongoDB 数据库安 ...
- dajngo cache,throttling
缓存 背景介绍: 动态网站的问题就在于它是动态的. 也就是说每次用户访问一个页面,服务器要执行数据库查询,启动模板,执行业务逻辑以及最终生成一个你所看到的网页,这一切都是动态即时生成的. 从处理器资源 ...
- CF618G(利用浮点数精度+矩乘优化DP)
这题真的太神辣,%了一发题解,原来还能这么搞QWQ 设\(A_{i,j}\)表示不加任何限制时,第\(i\)个格子会出现权值为\(j\)的史莱姆的概率,则有: \[A_{i,j}=A_{i,j-1}* ...
- 4.4清北学堂Day1 主要内容:数论,数学
Day 1; 1.常见的高精 输入输出都用字符数组: 字符数组的实际长度用strlen()来求: 运算时倒序运算,把每一个字符都-‘0’ 进位的处理上也要注意: 小数减大数时先判断大小然后加负号 只能 ...
- Linux设备树(三 属性)
三 属性(property) device_type = "memory"就是一个属性,等号前边是属性,后边是值.节点是一个逻辑上相对独立的实体,属性是用来描述节点特性的,根据需要 ...
- vue-cli3.0 gui(一)
vue-cli3.0 gui 安装: npm i core-js -g:用于JavaScript的模块化标准库. npm i -g @vue/cli:vue的脚手架工具 运行: vue ui:运行vu ...
- Django admin修改密码
django的admin用户被我多动症一样的测试,给密码弄丢了,需要重置. 从数据库重置的可能性为0,因为django对于密码有保护策略.考虑从运行程序的地方进行重置: 1.在程序的文件夹下,执行这样 ...
- saltstack主机管理项目:今日总结(六)
一.总目录 二.具体代码 salt #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:luoahong import os,sys if __ ...