差别
这里会显示出您选择的修订版和当前版本之间的差别。
|
3.dokuwiki功能测试区:ces [2020/12/19 10:50] 101.86.234.130 创建 |
3.dokuwiki功能测试区:ces [2020/12/19 10:53] (当前版本) 101.86.234.130 |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | <p># day12</p><p><br/></p><p>## 今日内容</p><p><br/></p><p>- 函数中高级(闭包/高阶函数)</p><p>- 内置函数</p><p>- 内置模块(.py文件)</p><p><br/></p><p>## 内容回顾</p><p><br/></p><p>- 函数基础概念</p><p><br/></p><p>  - 函数基本结构</p><p><br/></p><p>  ```python</p><p>  def func(arg):</p><p>  return arg;</p><p>  v1 = func(123)</p><p>  ```</p><p><br/></p><p>  - 参数</p><p><br/></p><p>  - 写函数</p><p>  - def func(a1,a2):pass </p><p>  - def func(a1,a2=None):pass </p><p>  - def func(*args,**kwargs):pass </p><p>  - 执行函数</p><p>  - 位置参数在前/关键字参数在后。</p><p><br/></p><p>- 函数小高级</p><p><br/></p><p>  - 函数可以做变量</p><p><br/></p><p>  ```python</p><p>  def func():</p><p>  pass</p><p>  v1 = func</p><p>  v1()</p><p>    </p><p>    </p><p>  v2 = [func,func,func]</p><p>  v2[1]()</p><p>  ```</p><p><br/></p><p>  - 函数可以做参数</p><p><br/></p><p>  ```python</p><p>  def func(arg):</p><p>  v2 = arg()</p><p>    </p><p>  def show():</p><p>  pass</p><p>    </p><p>  v1 = func(show)</p><p>  # 注意返回值</p><p>  ```</p><p><br/></p><p>  - Python中以函数为作用域</p><p><br/></p><p>  ```python</p><p>  # 第一题</p><p>  for item in range(10):</p><p>  pass</p><p>  print(item)</p><p>    </p><p>  # 第二题</p><p>  item = 10</p><p>  def func():</p><p>  for item in range(10):</p><p>  pass </p><p>  print(item)</p><p>  func()</p><p>    </p><p>  # 第三题</p><p>  item = 10</p><p>  def func():</p><p>  item = 2</p><p>  def inner():</p><p>  print(item)</p><p>  for item in range(10):</p><p>  pass </p><p>  inner()</p><p>  func()</p><p>    </p><p>  # 第四题【新浪微博】</p><p>  def func():</p><p>  for num in range(10):</p><p>  pass</p><p>  v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]</p><p>  result1 = v4[1]()</p><p>  result2 = v4[2]()</p><p>  print(result1,result2)</p><p>  func()</p><p>    </p><p>  # 第五题【新浪微博】</p><p>  def func():</p><p>  for num in range(10):</p><p>  pass</p><p>  v4 = [lambda :num+10,lambda :num+100,lambda :num+100,]</p><p>  result1 = v4[1]()</p><p>  num = 73</p><p>  result2 = v4[2]()</p><p>  print(result1,result2)</p><p>  func()</p><p>    </p><p>  ```</p><p><br/></p><p>  - lambda表达式(匿名函数)</p><p><br/></p><p>  ```python</p><p>  v = [lambda x:x=100,]</p><p>  ```</p><p><br/></p><p>    </p><p><br/></p><p>  - 内置</p><p><br/></p><p>  - 输入输出</p><p><br/></p><p>  - print</p><p>  - input</p><p><br/></p><p>  - 强制转换</p><p><br/></p><p>  - int</p><p>  - bool</p><p>  - str</p><p>  - list</p><p>  - tuple</p><p>  - dict</p><p>  - set</p><p><br/></p><p>  - 数学相关</p><p><br/></p><p>  - max</p><p><br/></p><p>  - min</p><p><br/></p><p>  - sum</p><p><br/></p><p>  - abs</p><p><br/></p><p>  - divmod</p><p><br/></p><p>  - float</p><p><br/></p><p>  - pow</p><p><br/></p><p>  ```python</p><p>  v = pow(2,3)</p><p>  print(v)</p><p>  ```</p><p><br/></p><p>  - round</p><p><br/></p><p>  ```python</p><p>  v = round(1.127,2)</p><p>  print(v)</p><p>  ```</p><p><br/></p><p>  - 进制</p><p><br/></p><p>  - bin</p><p>  - oct</p><p>  - int</p><p>  - hex </p><p><br/></p><p>  - 其他</p><p><br/></p><p>  - len</p><p>  - range</p><p>  - id</p><p>  - type</p><p>  - open</p><p><br/></p><p>## 补充</p><p><br/></p><p>1. 数据类型中的方法到底有没有返回值?</p><p><br/></p><p>  - 无返回值</p><p><br/></p><p>   ```pytohn</p><p>   v = [11,22,33]</p><p>   v.append(99) # 无返回值</p><p>   ```</p><p><br/></p><p>  - 仅有返回值:</p><p><br/></p><p>   ```python</p><p>   v = "alex"</p><p>   result = v.split('l')</p><p>   </p><p>  v = {'k1':'v2'}</p><p>   result1 = v.get('k1')</p><p>   result2 = v.keys()</p><p>   ```</p><p><br/></p><p>  - 有返回+修改数据</p><p><br/></p><p>   ```python</p><p>  v = [11,22,33]</p><p>   result = v.pop()</p><p>   ```</p><p><br/></p><p>  - 常用需要记住</p><p><br/></p><p>  - str</p><p>  - strip,返回字符串</p><p>  - split,返回列表</p><p>  - replace,返回字符串</p><p>  - join,返回字符串。</p><p>  - list</p><p>  - append,无</p><p>  - insert,无</p><p>  - pop,返回要删除的数据</p><p>  - remove,无</p><p>  - find/index,返回索引的位置。</p><p>  - dict</p><p>  - get</p><p>  - keys</p><p>  - values</p><p>  - items</p><p><br/></p><p>2. 函数内部的数据是否会混乱。</p><p><br/></p><p>  - 函数内部执行相互之间不会混乱</p><p>  - 执行完毕 + 内部元素不被其他人使用 => 销毁</p><p><br/></p><p><br/></p><p><br/></p><p>## 内容详细</p><p><br/></p><p>### 1. 函数中高级</p><p><br/></p><p>#### 1.1 函数可以做返回值</p><p><br/></p><p>```python</p><p><br/></p><p>def func():</p><p>  print(123)</p><p><br/></p><p>def bar():</p><p>  return func</p><p><br/></p><p>v = bar()</p><p><br/></p><p>v()</p><p>```</p><p><br/></p><p>```python</p><p>name = 'oldboy'</p><p>def func():</p><p>  print(name)</p><p>    </p><p>def bar():</p><p>  return func</p><p><br/></p><p>v = bar()</p><p><br/></p><p>v()</p><p>```</p><p><br/></p><p>```python</p><p>def bar():</p><p>  def inner():</p><p>  print(123)</p><p>  return inner</p><p>v = bar()</p><p>v()</p><p>```</p><p><br/></p><p>```python</p><p>name = 'oldboy'</p><p>def bar():</p><p>  name = 'alex'</p><p>  def inner():</p><p>  print(name)</p><p>  return inner</p><p>v = bar()</p><p>v()</p><p>```</p><p><br/></p><p>```python</p><p>name = 'oldboy'</p><p>def bar(name):</p><p>  def inner():</p><p>  print(name)</p><p>  return inner</p><p>v1 = bar('alex') # { name=alex, inner } # 闭包,为函数创建一块区域(内部变量供自己使用),为他以后执行提供数据。</p><p>v2 = bar('eric') # { name=eric, inner }</p><p>v1()</p><p>v2()</p><p>```</p><p><br/></p><p>练习题</p><p><br/></p><p>```python</p><p># 第一题</p><p>name = 'alex'</p><p>def base():</p><p>  print(name)</p><p><br/></p><p>def func():</p><p>  name = 'eric'</p><p>  base()</p><p><br/></p><p>func() # {name=eric, }</p><p>    </p><p><br/></p><p># 第二题</p><p>name = 'alex'</p><p><br/></p><p>def func():</p><p>  name = 'eric'</p><p>  def base():</p><p>  print(name)</p><p>  base()</p><p>func()</p><p><br/></p><p># 第三题</p><p>name = 'alex'</p><p><br/></p><p>def func():</p><p>  name = 'eric'</p><p>  def base():</p><p>  print(name)</p><p>  return base </p><p>base = func()</p><p>base()</p><p><br/></p><p>```</p><p><br/></p><p>注意:函数在何时被谁创建?</p><p>面试题</p><p><br/></p><p>```python</p><p>info = []</p><p><br/></p><p>def func():</p><p>  print(item)</p><p>    </p><p>for item in range(10):</p><p>  info.append(func)</p><p><br/></p><p>info[0]()</p><p>```</p><p><br/></p><p>```python</p><p>info = []</p><p><br/></p><p>def func(i):</p><p>  def inner():</p><p>  print(i)</p><p> return inner</p><p><br/></p><p>for item in range(10):</p><p>  info.append(func(item))</p><p><br/></p><p>info[0]()</p><p>info[1]()</p><p>info[4]()</p><p><br/></p><p>```</p><p><br/></p><p>#### 1.2 闭包</p><p><br/></p><p>```python</p><p>def func(name):</p><p>  def inner():</p><p>  print(name)</p><p> return inner </p><p><br/></p><p>v1 = func('alex')</p><p>v1()</p><p>v2 = func('eric')</p><p>v2()</p><p>```</p><p><br/></p><p>#### 1.3 高阶函数</p><p><br/></p><p>- 把函数当作参数传递</p><p>- 把函数当作返回值</p><p><br/></p><p>注意:对函数进行赋值</p><p><br/></p><p>#### 1.4 总结</p><p><br/></p><p>- 函数执行的流程分析(函数到底是谁创建的?)</p><p>- 闭包概念:为函数创建一块区域并为其维护自己数据,以后执行时方便调用。【应用场景:装饰器 / SQLAlchemy源码】</p><p><br/></p><p>### 2. 内置函数</p><p><br/></p><p>- 编码相关</p><p><br/></p><p>  - chr,将十进制数字转换成 unicode 编码中的对应字符串。 </p><p><br/></p><p>  ```</p><p>  v = chr(99)</p><p>  print(v)</p><p>  ```</p><p><br/></p><p>  - ord,根据字符在unicode编码中找到其对应的十进制。</p><p><br/></p><p>  ```python</p><p>  num = ord('中')</p><p>  ```</p><p><br/></p><p>  - 应用:</p><p><br/></p><p>  ```python</p><p>  import random</p><p>    </p><p>  def get_random_code(length=6):</p><p>  data = []</p><p>  for i in range(length):</p><p>  v = random.randint(65,90)</p><p>  data.append(chr(v))</p><p>    </p><p>  return  ''.join(data)</p><p>    </p><p>    </p><p>  code = get_random_code()</p><p>  print(code)</p><p>  ```</p><p><br/></p><p>  ```python</p><p>  import random # 导入一个模块 </p><p>    </p><p>  v = random.randint(起始,终止) # 得到一个随机数</p><p>  ```</p><p><br/></p><p>- 高级一点的内置函数</p><p><br/></p><p>  - map,循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表中,并返回。</p><p><br/></p><p>  ```python</p><p>  v1 = [11,22,33,44]</p><p>  result = map(lambda x:x+100,v1)</p><p>  print(list(result)) # 特殊</p><p>  ```</p><p><br/></p><p>  - filter</p><p><br/></p><p>  ```python</p><p>  v1 = [11,22,33,'asd',44,'xf']</p><p>    </p><p>  def func(x):</p><p>  if type(x) == int:</p><p>  return True</p><p>  return False</p><p>  result = filter(func,v1) # [11,]</p><p>  print(list(result))</p><p>    </p><p>    </p><p>  result = filter(lambda x: True if type(x) == int else False ,v1)</p><p>  print(list(result))</p><p>    </p><p>  result = filter(lambda x: type(x) == int ,v1)</p><p>  print(list(result))</p><p>  ```</p><p><br/></p><p>  - reduce</p><p><br/></p><p>  ```python</p><p>  import functools</p><p>  v1 = ['wo','hao','e']</p><p>    </p><p>  def func(x,y):</p><p>  return x+y</p><p>  result = functools.reduce(func,v1) </p><p>  print(result)</p><p>    </p><p>  result = functools.reduce(lambda x,y:x+y,v1)</p><p>  print(result)</p><p>  ```</p><p><br/></p><p>- 面试题:</p><p><br/></p><p>  - 常用的内置函数有哪些?</p><p><br/></p><p>  - filter/map/reduce是什么意思?</p><p><br/></p><p>  - 什么是匿名函数?</p><p><br/></p><p>  ```python</p><p>  def func():</p><p>  pass </p><p>    </p><p>  v = [lambda x:x+100,]</p><p>  ```</p><p><br/></p><p>  </p><p><br/></p><p>### 3. 模块</p><p><br/></p><p>将指定的 “字符串” 进行加密。</p><p><br/></p><p>```</p><p>import hashlib</p><p><br/></p><p>def get_md5(data):</p><p>  obj = hashlib.md5()</p><p>  obj.update(data.encode('utf-8'))</p><p>  result = obj.hexdigest()</p><p>  return result</p><p><br/></p><p>val = get_md5('123')</p><p>print(val)</p><p>```</p><p><br/></p><p>加盐</p><p><br/></p><p>```python</p><p>import hashlib</p><p><br/></p><p>def get_md5(data):</p><p>  obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))</p><p>  obj.update(data.encode('utf-8'))</p><p>  result = obj.hexdigest()</p><p>  return result</p><p><br/></p><p>val = get_md5('123')</p><p>print(val)</p><p>```</p><p><br/></p><p>应用:</p><p><br/></p><p>```python</p><p>import hashlib</p><p>USER_LIST = []</p><p>def get_md5(data):</p><p>  obj = hashlib.md5("12:;idrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8'))</p><p>  obj.update(data.encode('utf-8'))</p><p>  result = obj.hexdigest()</p><p>  return result</p><p><br/></p><p><br/></p><p>def register():</p><p>  print('**************用户注册**************')</p><p>  while True:</p><p>  user = input('请输入用户名:')</p><p>  if user == 'N':</p><p>  return</p><p>  pwd = input('请输入密码:')</p><p>  temp = {'username':user,'password':get_md5(pwd)}</p><p>  USER_LIST.append(temp)</p><p><br/></p><p>def login():</p><p>  print('**************用户登陆**************')</p><p>  user = input('请输入用户名:')</p><p>  pwd = input('请输入密码:')</p><p><br/></p><p>  for item in USER_LIST:</p><p>  if item['username'] == user and item['password'] == get_md5(pwd):</p><p>  return True</p><p><br/></p><p><br/></p><p>register()</p><p>result = login()</p><p>if result:</p><p>  print('登陆成功')</p><p>else:</p><p>  print('登陆失败')</p><p>```</p><p><br/></p><p><br/></p><p><br/></p><p>#### 赠送:密码不显示(只能在终端运行)</p><p><br/></p><p>```python</p><p>import getpass</p><p><br/></p><p>pwd = getpass.getpass('请输入密码:')</p><p>if pwd == '123':</p><p>  print('输入正确')</p><p>```</p><p><br/></p><p><br/></p><p><br/></p><p>## 总结</p><p><br/></p><p>- 自定义函数</p><p>  - 基本函数结构(98%)</p><p>  - 高级</p><p>  - 参数</p><p>  - 闭包</p><p>- 内置函数</p><p>- 模块</p><p>  - random</p><p>  - hashlib</p><p>  - getpass </p><p><br/></p><p>## 本周作业</p><p><br/></p><p>1. 学习笔记:md文件</p><p>2. 思维导图:png文件</p><p>3. 本周每天的作业(考试题)</p><p>4. 今天作业(码云)</p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p><p><br/></p> | + | <table><tbody><tr class="firstRow"><td width="267" valign="top"><br/></td><td width="267" valign="top"><br/></td><td width="267" valign="top"><br/></td></tr><tr><td width="267" valign="top"><br/></td><td width="267" valign="top"><br/></td><td width="267" valign="top"><br/></td></tr></tbody></table><p>### 3. 模块</p><p><br/><br/></p><p>将指定的 “字符串” 进行加密。</p><p><br/></p><p>```</p><p>import hashlib</p><p><br/></p><p>def get_md5(data):</p><p>  obj = hashlib.md5()</p><p>  obj.update(data.encode('utf-8'))</p><p>  result = obj.hexdigest()</p><p>  return result</p><p><br/></p><p>val = get_md5('123')</p><p>print(val)</p><p>```</p><p><br/></p><p>1. 学习笔记:md文件</p><p>2. 思维导图:png文件</p><p>3. 本周每天的作业(考试题)</p><p>4. 今天作业(码云)</p> |
