美文网首页
进阶学习4-函数/模块化

进阶学习4-函数/模块化

作者: 龙猫六六 | 来源:发表于2020-01-29 15:41 被阅读0次

总结

项目 描述 备注
全局变量 修改关键字:gloab 作用域:全局
局部变量 / 作用域:函数内部
嵌套函数变量 修改关键字:nonlocal 作用域:嵌套函数可访问被嵌套函数的变量
参数默认值 fun(x=10) 参数缺省值,自动使用默认值
lamdba lambda val1, val2: expression
map 遍历,将每个元素作为参数输入func map(lamdba x:x*2, iterable)
filter 过滤,返回func true的值 filter(lambda x:x%2==0, iterabel)
reduce x1,x2两两作为参数输入func reduce(lambda x, y: x * y, iterable)
绝对路径import from project.targetmodule import *
相对路径import 上层目录sys.path.append('..') 上上层目录sys.path.append('../..')

变量作用域

局部变量

# 局部变量
def local_val(arg):
    print('local_val arg is {}'.format(arg))
    arg = 10
    print('local_val arg change is {}'.format(arg))

if __name__ == '__main__':
    arg = 11
    local_val(arg)
#######
#local_val arg is 11
#local_val arg change is 10

全局变量

GLOABL_VAL = 10

# 全局变量
def global_val():
    global GLOABL_VAL
    GLOABL_VAL = 11
    print('gloabl_val is {}'.format(GLOABL_VAL))
if __name__ == '__main__':
    print('gloabl_val is {}'.format(GLOABL_VAL))
    global_val()
    print('gloabl_val is {}'.format(GLOABL_VAL))
#######
#gloabl_val is 10
#gloabl_val is 11
#gloabl_val is 11
嵌套函数变量
# 嵌套函数访问外部函数变量
def nonlocal_val():
    tempa = 11
    print('nonlocal tempa is {}'.format(tempa))
    def change_nonlocal_val():
        nonlocal tempa
        tempa = 10
        print('nonlocal tempa is {}'.format(tempa))
    change_nonlocal_val()
    print('nonlocal tempa is {}'.format(tempa))

if __name__ == '__main__':
    nonlocal_val()
############
#nonlocal tempa is 11
#nonlocal tempa is 10
#nonlocal tempa is 11
闭包

与嵌套函数类似,不同的是闭包外部函数返回的是一个函数,而不是一个具体的值

  • 装饰器的工作原理
  • exponent能被内部嵌套函数exponent_of所使用
  • val为内部嵌套函数的参数
  • return exponent_of返回函数
def nth_power(exponent):
    def exponent_of(val):
        return val ** exponent
    return exponent_of

if __name__ == '__main__':
    square = nth_power(2)
    cube = nth_power(3)

    print(square(3))
    print(cube(3))

函数

匿名函数lambda

lamdba: val1, val2, val3: expression

  • lambda是一个表达式(expression), 并不是一个语句(statement)
  • lambda的主体只有一行简单的表达式,并不能扩展成一个多行的代码块
    实例
temp = [(lambda x: x * x)(x) for x in range(10)]
print(temp)

函数式编程

  • filter:
    filter() 函数表示对 iterable 中的每个元素,都使用 function 判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合
  • map:
    函数 map(function, iterable) 的第一个参数是函数对象,第二个参数是一个可以遍历的集合,它表示对 iterable 的每一个元素,都运用 function 这个函数。
  • reduce
    它通常用来对一个集合做一些累积操作。function 同样是一个函数对象,规定它有两个参数,表示对 iterable 中的每个元素以及上一次调用后的结果,运用 function 进行计算,所以最后返回的是一个单独的数值。
l = [(1, 20), (3, 0), (9, 10), (2, -1)]
l1 = sorted(l, key=lambda x: x[1])
print(l1)

squared = map(lambda x: x * x, [1, 2, 3, 4, 5])
print(list(squared))

filter_val = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6])
print(list(filter_val))

product = reduce(lambda x, y: x * y, [1, 2, 3, 4, 5, 6])
print(product)

模块化

函数的引用问题
如下图为工作目录,test->class13


image.png

绝对路径引用

main.py调用utils->class_utils.py文件的Encoder类方法endocer

from class13.utils.class_utils import Encoder

src.sub_main调用utils->class_utils.py文件的Encoder类方法endocer

from class13.utils.class_utils import Encoder

相对路径应用

  • 当前层
    main.py调用utils->class_utils.py文件的Encoder类方法endocer
from utils.class_utils import Encoder
  • 上层
    src.sub_main调用utils->class_utils.py文件的Encoder类方法endocer
import sys
sys.path.append('..')
from class_utils import Encoder
  • 上上层
    src.src_sub.sub_sub_main调用utils->class_utils.py文件的Encoder类方法endocer
import sys
sys.path.append('../..')
from class_utils import Encoder

原理

实际上,Python 解释器在遇到 import 的时候,它会在一个特定的列表中寻找模块。这个特定的列表,可以用下面的方式拿到:

import sys
print(sys.path)
###输出
['/Users/jc/Desktop/技术栈/python/test/class13/src/src_sub', 
'/Users/jc/Desktop/技术栈/python/test',
'/Applications/PyCharm.app/Contents/helpers/pycharm_display', 
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', 
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', 
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', 
'/Users/jc/Library/Python/3.7/lib/python/site-packages', 
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages', 
'/Applications/PyCharm.app/Contents/helpers/pycharm_matplotlib_backend']

相关文章

  • 进阶学习4-函数/模块化

    总结 项目描述备注全局变量修改关键字:gloab作用域:全局局部变量/作用域:函数内部嵌套函数变量修改关键字:no...

  • JavaScript系列-4-函数进阶

    本文作者:钟昕灵,叩丁狼高级讲师。原创文章,转载请注明出处。 作用域安全的构造函数 构造函数的调用方式存在下面两种...

  • 21天E战到底学习笔记Day11

    21天E战到底学习笔记Day11-认识函数,进阶用法 今天的学习内容继续是函数的基础知识,进阶用法, 一、绝对引用...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

  • 00-Android体系-目录

    2-Android进阶 3-Java知识 4-开源框架 5-设计模式 6-计算机基础 7-进阶技能

  • python 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • python 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • Python函数高阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • 17 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • 【webpack进阶】你真的掌握了loader么?- loade

    往期文章:【webpack进阶】前端运行时的模块化设计与实现【webpack进阶】使用babel避免webpack...

网友评论

      本文标题:进阶学习4-函数/模块化

      本文链接:https://www.haomeiwen.com/subject/wkwvthtx.html