上节回顾
函数:
数学意义上的函数 y = 2x +1
函数,传一个值(x),就会有一个固定的y值
def test(x):其中def是关键字,test(x)是函数名。
形参的特点:参数是个变量值。
实参的特点:参数是个具体的值
def test(x)
'''
注释,解释你这个参数的作用,一个函数就是为了完成某个特定的功能
'''
代码块
return 返回值------------------返回值可以是[None,一个值(数字,字符串),多个值(元组)
test()---------------------------这个表示运行test这个函数,test:表示引用。()运行
test(1,2,3,4,5)
位置参数要求要一一对应
实参占实际内存空间
test(z=1,x=2,y=3)---------------------关键字传参
大原则是:位置参数一定要在关键参数左边
默认参数通常用于软件的安装
def test ( x,*args,**kwargs):
test(1,2,3,4,5)------------其中1会传给x,其他多余的参数会传给args,以元组的形式保存。
在函数中,不能够重复传值给同一个在同个括号里,
test(1,2,3,4,a=3,b=4)--------------其中a=3,b=4会以字典形式保存,(**kwagrs)
pass---------------什么都不干
函数的优点:
1.减少代码块
2.保持一致性,易维护
3.可扩展性
************************************************************
全局变量和局部变量
怎么定义全局变量:
第一 要顶头写代码,没有缩进。全局变量在任何位置都生效。全局变量最好是全部大写,
全局变量所有人都可以拿得到,作用域是全局。
第二 全局变量最好要往上提(意思是写在开头位置)
局部变量:最好变量名全部小写
def change_name():
_____print('change_name') -------------------子程序,有缩进。
局部变量重新赋值给全局变量
def change_name():
global name --------------------------这个是修改的是name就是全局变量
(glabal name :已经声明,name是全局变量)类似指针,引用。
glabal(是命令,关键字)
局部变量的作用域是子程序,局部定义的和全局无关,
参数一般是先从自己的局部作用域内找,找不到就往外部找(全局作用域或者上一级的局部作用域),外部没有再去外部
的外部找,直到外部结束。
变量的私有化只能是函数,局部变量不能直接拿到全局里,要通过一些其他的方法,暂时不清楚。
——————————————————————————————
globals
1.如果函数的内容无globals的关键字,优先读取局部变量。能够读取全句变量,无法对全局变量重新赋值,但是对于
可变类型(列表,字典),可以对内部元素进行操作。
1.1有声明局部变量,找自己
1.2无声明局部变量,找全局变量
2.如果函数中有global关键字,变量本质就是全局变量的那个变量,可读取可赋值。
如果全局变量是列表?怎么重新赋值?
覆盖
name.append('元素‘)这样是可以的。还有其他列表魔法可以用
函数和函数之间可以嵌套
什么是哈希值?*********************************
外部无法直接调用内部参数,外部可以利用内部返回值调用内部参数
nonlocal---------------指上一级变量
前向引用
函数即变量
函数名称-------是指内存地址
递归:(好比问路)
每进行一次循环,内存会保持一次层数,会占内存(最糟会内存溢出)
必须要有一个明确结束条件
import time---------加载time的功能
time sleep(1) ----停止一秒
pychram使用方法(看递归)
断点
在左边加上小红点,可以一个个运行
enumrate