Python-100-Days-2

Day2

1. 函数和模块的使用
	“代码有很多种坏味道,重复是最坏的一种”
	利用def关键词来定义函数,避免重复的代码
	
2. 标准函数的写法
	def func(par1,par2,par3):
        """
        函数作用
      :parameters  par1: 参数par1意义
      :parameters  par2: 参数par2意义
        :parameters  par3: 参数par3意义
        :   return:返回结果的意义
      """
     代码块(包含return)
     
3. 函数的参数
	python函数的参数可以有默认值,也支持使用可变参数,因此python并不需要支持函数重载。python没有重载的概念,函数	同名,后面的定义覆盖前面的定义。
def add(a=0,b=2,c=3):     add(5,8,9)  add(1,,5)都是支持的
有时候不知道函数参数的数目,可以使用可变函数*args来传入参数(*参数表示可变参数),可变参数*args可以传入0或者多个参数
def add(*args):

4. 模块module的概念
为了避免函数重命名等一些问题,使用module来整合起几个函数,调用时
from module import function

module1.py
def foo():
	print("hello world)

module2.py
def foo():
	print(goog bye,world")

test.py
from module1 import foo
from module2 import foo
foo
#输出goog bye,world

5. 模块使用的注意事项
如果我们导入的模块除了定义函数之外还中有可以执行代码,那么Python解释器在导入这个模块时就会执行这些代码,事实上我们可能并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中。
if __name__ == '__main__',只有直接执行模块,__name__才是__main__,否则__name__的数值为模块的名字 如 module.py

6. python变量的作用域
if __name__ == '__main__'执行语句中的变量属于 全局变量(global var),def函数里面的变量属于局部变量(Local var),def函数内再def的函数,其中的变量属于局部变量,但是它,python内置的隐含标识符如 min len 等属于内置作用域。
def foo():
	b = 'hello'
	def bar(): #python中可以在函数内部再定义函数
		c = True
		print(a)
		print(b)
		print(c)
		
	bar()
	#print(c) #NameError:name 'c' is not defined

if __name__ == '__main__':
		a =100
		#print(b) # NameError:name 'b' is not defined
		foo()
a 全局变量 
b 是foo()的局部变量
c 是bar()的局部变
b 是bar()的嵌套变量

if __name__ == '__main__' 是第一级函数
foo()是第二级函数
bar()是第三级函数
python里面变量的处理遵从三个原则:
① 低级函数处理 等级/高级 变量
② 相同变量的处理使用global nonlocal关键词进行区分
③ 跨级处理变量是禁止的

7. python函数处理变量的顺序
局部作用域 > 嵌套作用域 > 全局作用域 > 内置作用域
减少全局变量的使用,全局变量生命周期长,导致对象占用的内存长时间无法回收,降低代码之间的耦合度
尽量变量的作用域再函数内部,如果要在函数调用结束后依然可以访问,需要使用闭包

8. 如何理解闭包(https://www.cnblogs.com/Lin-Yi/p/7305364.html)
	a. 一个函数,如果函数名后紧跟一对括号,相当于现在我就要调用这个函数,如果不跟括号,相当于只是一个函数的名字,		里面存了函数所在位置的引用。python里面一切皆对象,所谓函数名也是一个变量名字,引用即地址。
	b. python 函数可以随意读取全局变量,如何修改全局变量:
	① global 声明全局变量 
	② 全局变量是可变类型数据的时候可以修改
	c. 内函数修改闭包变量(外函数绑定给内函数的局部变量)
	①在python3中,可以用nonlocal 关键字声明 一个变量, 表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量。
	②在python2中,没有nonlocal这个关键字,我们可以把闭包变量改成可变类型数据进行修改,比如列表。
	![示例](https://img-blog.csdnimg.cn/20191212161727895.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01pVmxQdQ==,size_16,color_FFFFFF,t_70)
	虽然函数我们只定义了一次,但是外函数在运行的时候,实际上是按照里面代码执行的,外函数里创建了一个函数,我们每次调用外函数,它都创建一个内函数,虽然代码一样,但是却创建了不同的对象,并且把每次传入的临时变量数值绑定给内函数,再把内函数引用返回。每次开启内函数都在使用同一份闭包变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值