ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

百度飞桨领航团零基础Python速成营 课程总结3

2021-03-05 16:00:03  阅读:186  来源: 互联网

标签:函数 artical Python 飞桨 团零 参数 str print def


百度飞桨领航团零基础Python速成营 课程总结3

课程链接 https://aistudio.baidu.com/aistudio/course/introduce/7073
飞桨官网 https://www.paddlepaddle.org.cn/
推荐学习网站 https://www.runoob.com/python3/python3-tutorial.html


目录

课节3: Python函数基础

函数(Function)

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
  • 函数能提高应用的模块性,和代码的重复利用率。
  • 定义函数
    def functionname( parameters ): 
    	"函数_文档字符串" 
    	function_suite 
    	return [expression]
    
  • 参数传递:
    • 必选参数:必选参数须以正确的顺序传入函数、数量必须和声明时的一样。
    • 默认参数:默认参数的值如果没有传入,则被认为是默认值。
    • 可变参数:加了星号(*)的变量名会存放所有未命名的变量参数。可变参数在函数调用时自动组装为一个tuple。
    • 关键字参数:关键字参数在函数内部自动组装为一个dict。
      def score_info(name, **kw):
          if '语文成绩' in kw:
              print(name, '的语文成绩', kw['语文成绩'])
          if '数学成绩' in kw:
              print(name, '的数学成绩', kw['数学成绩'])
              
      
      def person_info(name, age, **kw):
          print('姓名:', name, ' 年龄',age)
          score_info(name, **kw)    
      
      score_cfg = {'语文成绩':65, '数学成绩':60}
      person_info('张三', 18, **score_cfg)
      
      输出:
      姓名: 张三  年龄 18
      张三 的语文成绩 65
      张三 的数学成绩 60
      
    • 命名关键字参数:限制关键字参数的名字。和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,后面的参数被视为命名关键字参数。 命名关键字参数必须传入参数名,可以有缺省值,可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔 符
    • 参数定义的顺序必须是:必选参数 --> 默认参数 --> 可变参数 --> 命名关键字参数 --> 关键字参数
  • 命名空间(Namespace):
    命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
    • 内置命名空间(Built-in names): 用于存放Python 的内置函数的空间,比如,print,input等不需要定义即可使用的函数就处在内置命名空间。
    • 全局命名空间(Global names):模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
    • 局部命名空间(Local names):函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量。在函数内定义的局部变量,在函数执行结束后就会失效,即无法在函数外直接调用函数内定义的变量。
    • 命名空间查找顺序: 局部命名空间→全局命名空间→内置命名空间。
    • 命名空间的生命周期:取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。
  • 作用域(Scope):
    作用域就是一个 Python 程序可以直接访问命名空间的正文区域。在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。
    • Local:在程序的最内层,包含局部变量,比如,一个函数的内部。
    • Enclosing:包含了非局部(non-local)也非全局(non-global)的变量。比如,两个嵌套函数,函数(或类)A里面又包含了函数B,那么对于B中的名称来说 A中的作用域就为no-nlocal。
    • Global:当前脚本的最外层,比如,当前模块的全局变量。
    • Built-in: 包含了内建的变量/关键字等,比如,int。全局变量和局部变量。定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
    • 作用域查找顺序: L –> E –> G –> B。
  • 匿名函数:lambda [arg1 [,arg2,…argn]]:expression
  • 高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归)。
    • map() 函数会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
      map(function, iterable, …)。
      Python 2.x 返回列表。Python 3.x 返回迭代器。

    • reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
      reduce(function, iterable[, initializer])

      • 注意:Python3.x reduce() 已经被移到 functools 模块里,如果我们要使用,需要引入 functools 模块来调用 reduce() 函数:from functools import reduce
    • sorted() 函数对所有可迭代的对象进行排序操作。sorted(iterable, cmp=None, key=None, reverse=False)

    • 偏函数:将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数,除非使用关键字参数。from functools import partial

    • 装饰器(Decorators):修改其他函数的功能的函数。装饰器最大的优势是用于解决重复性的操作,其主要使用的场景有如下几个:

      • 计算函数运行时间
      • 给函数打日志
      • 类型检查
      	# 装饰器输入一个函数,输出一个函数
      def print_working(func):
          def wrapper():
              print(f'{func.__name__} is working...')
              func()
          return wrapper
      
      def worker1():
          print('我是一个勤劳的工作者!')
      def worker2():
          print('我是一个勤劳的工作者!')
      def worker3():
          print('我是一个勤劳的工作者!')
      
      worker1 = print_working(worker1)
      worker1()
      worker2= print_working(worker2)
      worker2()
      worker3= print_working(worker2)
      worker3()
      
      @print_working
      def worker1():
          print('我是一个勤劳的工作者!')
      
      @print_working
      def worker2():
          print('我是一个勤劳的工作者!')
      
      @print_working
      def worker3():
          print('我是一个勤劳的工作者!')
      worker1()
      worker2()
      worker3()
      
    • 闭包(Closure):一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。

      # 一个需要注意的问题是,返回的函数并没有立刻执行,而是直到调用了f()才执行。
      
      def count():
          fs = []
          for i in range(1, 4):
              def f():
                  # print(id(i))
                  return i*i
              fs.append(f)
          return fs
      
      f1, f2, f3 = count()
      print(f1())
      print(f2())
      print(f3())
      

      输出:

      9
      9
      9
      
      def count():
          def f(j):
              def g():
                  # print(id(j))
                  return j*j
              return g
          fs = []
          for i in range(1, 4):
              fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
          return fs
      
      f1, f2, f3 = count()
      print(f1())
      print(f2())
      print(f3())
      

      输出:

      1
      4
      9
      
      • 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

模块(Module)

  • import 语句:import module1[, module2[,… moduleN]]。调用模块中函数:模块名.函数名。
  • from…import语句:from modname import name1[, name2[, … nameN]]。
    • 一个模块只会被导入一次,不管你执行了多少次import。
  • 安装/卸载:
    • pip install / uninstall
    • conda install / uninstall

 

作业三:Python函数基础(大作业)

作业内容:

  • 统计英语6级试题中所有单词的词频,并返回一个如下样式的字典
    {‘and’:100,‘abandon’:5}

  • 英语6级试题的文件路径./artical.txt

  • Tip: 读取文件的方法

    def get_artical(artical_path):
        with open(artical_path) as fr:
            data = fr.read()
        return data
    
    get_artical('./artical.txt')
    

处理要求:

  • (a) '\n’是换行符 需要删除
  • (b) 标点符号需要处理 [’.’, ‘,’, ‘!’, ‘?’, ‘;’, ‘’’, ‘"’, ‘/’, ‘-’, ‘(’, ‘)’]
  • © 阿拉伯数字需要处理 [‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘0’]
  • (d) 注意大小写 一些单词由于在句首,首字母大写了。需要把所有的单词转成小写 ‘String’.lower()
  • (e) 高分项
    通过自己查找资料学习正则表达式,并在代码中使用(re模块)
    可参考资料:https://docs.python.org/3.7/library/re.html
# 请根据处理要求下面区域完成代码的编写。
def get_artical(artical_path):
    with open(artical_path) as fr:
        data = fr.read()
    return data

# get_artical()为自定义函数,可用于读取指定位置的试题内容。
str_artical=get_artical('./artical.txt')
import string
# 去除数字
from string import digits
str_digits = str_artical.translate(str.maketrans('', '', digits))

# 去除符号
from string import punctuation
str_punctuation = str_digits.translate(str.maketrans('', '', punctuation))

# 去除选项中ABCD字母(题目没要求,个人添加)
#str_question = str_punctuation.translate(str.maketrans('', '', 'ABCD'))

# 小写
str_lower=str_question.lower()

# 去除空字符,切片
str_spilt=str_lower.split()

# 打印词频列表
num_words = {}
for str_spilt in str_spilt:
     num_words[str_spilt] = num_words.get(str_spilt, 0) + 1
print(num_words)
# 输出词频txt文本文件(题目没要求)
s = str(num_words)
f = open('dict.txt','w')
f.writelines(s)
f.close()
# 词频查询(题目没要求)
str_spilt=str_lower.split()
word=input('输入要查询的单词的次数')
print(str_spilt.count(word))
    • 1
      print(num_words)

```python
# 输出词频txt文本文件(题目没要求)
s = str(num_words)
f = open('dict.txt','w')
f.writelines(s)
f.close()
# 词频查询(题目没要求)
str_spilt=str_lower.split()
word=input('输入要查询的单词的次数')
print(str_spilt.count(word))

标签:函数,artical,Python,飞桨,团零,参数,str,print,def
来源: https://blog.csdn.net/weixin_48746231/article/details/114399375

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有