比如说我写了三个py程序,main m1m2在main中导入了m1 在m1中导入了m2。那么,可以直接在main中用m1吗?

7、CSRF-跨站请求伪造

# 每个用到usertype的地方,都要写一句这个太麻烦,所以写在构造函数中,一劳永逸。 # 上面这个方法存在的问题是,当修改数据库后,只有服务器重启后,页面才刷新 # 每次刷新页面时,会重新读取数据库。 # form 的第一类钩子,字段的钩子 # 此钩子是单纯只处理user字段的验证,其他字段可单独再次验证。 #form 的第二类钩子,整体的钩子 # 还记得strftime方法吗?按照指定格式输出字符串 # 如果是其他类型,则按照默认方式转码 # 不做任何操作,内部定义 save_m2m(用于保存多对多) f. 用于更新和初始化
}
1.使用类似三目运算符的方式来实现一个数的绝对值 if else
# 输入一个数,然后利用一个语句求它的绝对值
#输入一个整数,判断是否在0~100之间
#python支持复合的条件表达式
3.字符和Unicode编码之间的转换
4.判断是否是回文字符串,类似这种"abcba"
  • 解析,判断思路,如果是回文的话,则其字符串反转之后和原来的字符串是相同的.
#使用切片的方式实现字符串的翻转 #如果翻转之后的字符串和原来的字符串相等,则是回文.
5. "字符串" * n 表示的是重复打印n次字符串.利用这个可以打印一个矩形框
#打印一个5*5矩形框,当使用一个字符串和一个数字用*联系起来的时候,表示的是重复.
6.一个字符串去除首尾两个字符的方法.
  • 在字符串中,下标-1代表最后一个字符的下标,同时len(s) - 1也代表最后一个字符的下标.
#输入一个字符串,去除字符串的收尾两个字符
#方法一,利用最后一个下标的值是-1,来进行切割
#方法二,利用最后一个下标的值是len(s) - 1,来进行切割
    fillchar参数是可选的,如果不填,则默认用空格填充.
    返回值,这个函数返回一个长度为width的新字符串,原来的字符串居中显示,两边的用空格或者fillchar填充
# 输入三行文字,让这三行文字在一个方框内居中显示
# 如输入(不要输入中文):

1> 首先是求出最大的字符串长度,确定它的宽是len + 2个空格
2> 然后让所有的字符串居中打印即可.

  • 带有fillchar参数的例子,注意当width没有原来的字符串长度大时,原字符串原样返回.当width两边的剩余为奇数时,则左边会比右边的少1个.
8.已知一个字符串,打印这个字符串中的Unicode码最大的字符,以及它的Unicode码时
  • 分析循环遍历字符串,先假设最大的字符的Unicode码是max_ch,然后循环比较即可.利用ord()
#先设定最大的字符的unicode码为0
9.列表的前面插入数据,中间插入数据,后面插入数据,以及删除尾部操作演示
# 用索引和切片操作将原列表L 改变为: # 将原列表反转, 删除最后一个元素 #先利用列表索引切片赋值插入4,注意这里赋值相当于是插入操作,在原列表上进行的. #然后在列表的头部插入[1,2] #在5的后面插入6,也就是最后面
10.使用列表的方法生成40个斐波拉切数.
  • 始终用列表的最后两项作为斐波拉契数的最后两位.有三种方式,其中最简单的一种就是利用下标-1和-2
#生成40个斐波拉切数,利用列表
 L = [1,1] #先声明一个列表存放前两项
 #用a和b代表最后两项
 #然后让a,b还是最后两项
11.将用户输入的带有数字的字符串转换为数字列表.
#先将字符串按逗号进行分割,得到的是一个字符串列表 #利用列表推导式,将每一项转换为int #以上的代码也可以简化为一行 #还有一种笨重的方法,使用循环来做.
    方法2.使用count(x),判断这个元素出现的个数
    方法3.使用集合,集合具有自动去重功能
#方法1,in 和 not in.遍历L,如果元素不在L2内,就追加上去 #使用列表推导式,这里是无序的.
13.统计字符串中出现过的字符,以及每个字符出现的次数.
    方法1. 将字符串去重放入列表中,遍历这个列表,然后使用count每个字符出现的个数.
    方法2.可以使用字典,将字符作为字典的键,因为键是不能重复的,而个数就一直累加就可以了.
#统计字符串出现的字符,以及各个字符出现的次数
#去重然后遍历,无序的.
#如果按照出现的顺序,可以使用列表
14.单词和解释(字典的使用)
  • 输入单词和解释,将单词和解释存放起来,然后输入一个单词,查询单词对应的解释.如果输入空的时候,结束输入
#先创建一个字典用来存放单词的和解释 # 如果输入为空,结束录入
15.判断100到999之间的水仙花数,水仙花数是指个位的三次方,十位的三次方和百位的三次方的和等于自身.
    方法1,最原始的方法,求出个位数,十位数,百位数,然后做运算即可.
    方法2,将数转换为字符串,然后通过取字符串的各个值,即可取到相应的位的值
#先使用笨方法,将这个数的个十百提取出来 #十位,对100求余数,然后地板除10 #百位,直接对100地板除 #判断条件,如果是满足条件就返回True #利用字符串,字符串的三个元素就是对应了个十百位上的数
16.按行打印100以内的全部素数,利用函数来做
  • 使用函数,以及print函数的end的用法.2是素数
# 打印100以内的素数
17.python的局部变量和全局变量

定义在函数内部或函数形参的变量为局部变量.
局部变量只能在函数内部使用,首次对变量赋值时创建了局部变量,再次赋值的时候修改了绑定关系.
函数调用时被创建,函数调用结束之后销毁.

定义在函数外部,模块的内部的变量称为全局变量
所有的函数都可以访问全局变量,但是在函数内部不可以直接访问,必须事先用global声明,否则会被当成创建了一个局部变量

1> 全局变量在函数内部首次使用的时候,要加上global声明,否则会被当成是局部变量的声明和创建
2>局部变量只能在声明他的函数的内部访问,而全局变量则可以在整个模块内访问.


global y #这里是错误的,因为全局变量在声明之前被赋值了. global v #这里是错误,形参不能声明为全局变量. #一个变量不可能同时被声明为全局变量和形参变量.
    globals()和locals()函数返回的是一个字典,里面存放的是变量名和变量值的键值对.
    其中globals()返回的是当前模块所有的全局变量,不仅仅局限于你自己使用的全局变量.
  • 函数名就是变量,它在创建的时候可以绑定一个函数名.函数变量还可以改变绑定关系.
  • 函数变量使用()的调用方法,可以调用它绑定的函数.

先查找本地变量 -> 包裹这个函数外部函数的内部变量 -> 全局变量 -> 内置(内建)变量
本地变量在赋值的时候一般会创建或改变本地变量.

告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量
1)nonlocal语句只能在被嵌套的函数内部使用
2)访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
3)当有两层或两层以上的函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作
4)nonlocal语句的变量名列表里的变量名,不能出现在此函数的形参列表里.

#nonlocal语句只能使用在嵌套函数的内部函数,如果没有外部函数,则nonlocal语句会报错
#如果有多层,就近选择最近的层.
#创建一个两个数和的匿名函数,创建一个两个数差的匿名函数 # lambda依托于后面的表达式,并且表达式的结果只有一个 #后面只有是个合法的表达式都是可以的
#eval计算表达式的值

前两个输出跟上面解释的eval函数执行过程一样,不做过多解释。关于最后一个数字34,我们可以看出是:x = 1, y = 3是没有疑问的。关于z为什么还是30而不是4,这其实也很简单,我们只需要在理一下代码执行过程就可以了,其执行过程相当于:

  • 再来一个实例,eval()的参数问题
v = eval('x + y',{'x':1})#第二个参数必须是字典,并且必须包含表达式里的所有的元素
  • 函数式编程(函数可以作为参数插入另一个函数,还可以返回一个函数)

1> 特点1: 函数名也是一个变量,可以赋值给一个变量
2> 特点2:函数可以作为另外一个函数的参数出入
3> 特点3:函数可以作为另外一个函数的返回值.

用每一个函数完成完成细小的功能,然后一系列函数任意组合之后可以完成更大的功能.

当一个函数在运行时,不读取或改变除局部作用域以外的其他变量的时候,此函数为可重入函数.可重入函数有一个特性,如果每一次的参数一样,则其结果也是一样的.

    满足下列条件之一的即为高阶函数

1> 函数接收一个或多个函数作为参数传入
2> 函数的返回值依旧是一个函数

用函数和可迭代对象作为参数,用函数的返回值重新生成一个新的可迭代对象作为返回值.

function的参数的个数必须和后面的可迭代对象的个数一样.并且迭代调用结束的标志是可迭代参数有一个迭代结束就停止

# (用函数式和高阶函数map实现) #生成可迭代对象it,里面存放的就是各项的平方 # 以上代码可以简化为一行 # 可以使用匿名函数代替mypow #可以使用sum(iterable) 一个可迭代对象的求和公式

对iterable进行过滤,将iterable作为参数依次传递给function,如果function的返回值为True,就保留,如果为False就丢弃掉.然后将保留的数据作为一个可迭代对象返回.

#写一个过滤器求出100~200之间的所有的素数的和

默认升序返回一个新的列表包含了按照指定规则所有项目的迭代.不改变原来的可迭代对象

iterable可迭代对象,key排序规则,将可迭代对象带入key绑定的函数,按照结果进行排序,还可以指定可迭代对象的同一位置进行排序.reverse表示的是排序是否按照降序排列
reverse排序规则,False默认是升序排序,如果为True,表示的是降序排列

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。


  • key是一个方法,默认值是None,用来指定具体的排序算法;sorted对可迭代对象的每个元素使用key算法后再排序,返回一个排序后的可迭代对象。

# 按年龄排序,以列表元素tuple的第3个索引排序,升序排序
# 字符转换成小写后再排序,'a'和'A'值一样
#将names的内容按照每个元素的倒叙的排列顺序进行排列
    在嵌套函数中引用了自由变量的函数.这个自由变量就是外层嵌套函数中的变量(非全局变量).

1> 必须有嵌套函数
2> 内层嵌套函数必须引用外层函数的变量.这个变量就是自由变量
3>外层函数的返回值必须是内层函数

嵌套的内层函数可以使用外层函数中的局部变量,即使外层函数返回了,或者外层函数被删除了,内层函数依然可以使用外层函数的那个变量.

# 闭包,fn使用了变量y并且外层函数make_power的返回值是fn(内层函数)
# 这个闭包可以实现x的y次方
 #自右变量就是y,当函数make_power返回后,fn()依旧可以使用y的值
#假如让起实现平方的功能
"""闭包的作用: 当外部函数返回了, 外部函数的局部变量还可以被内部函数引用""" #当删除了fun_closule对象后, 外部参数还可以被内部函数引用.
  • 并且发现tmp内部函数和它的内存地址相同,即closule只是这个函数对象的一个引用。

  • 闭包的应用 (装饰器)

装饰器是一个函数,它用来包装另外一个函数.使得被装饰的函数在不改变原来代码的情况下添加新的功能.
装饰器的概念首先要明白两点:
装饰器函数是用被装饰的函数作为参数来实现的.将被装饰的函数带入到装饰器函数得到的返回值就是装饰过后的函数.

# 装饰器函数.以被装饰的函数为参数,返回内层函数.
#在内层函数内可以实现对被装饰的函数的功能的添加
# myfunc()函数前面加了装饰器,相当于是被装饰的函数的绑定对象改变了.
# 相当于是调用了如下代码:
# 将被装饰的函数作为参数传给装饰器函数,然后重新绑定了装饰器函数的返回值
  • 下面通过示例演示装饰器的好处
2.如果想要记录这个函数的执行时间,最初始的方法是入侵到原来的函数进行修改
# 计算一个函数的运行的时间,最暴力的方法
3.如果想不侵入原来代码,可以将原来的函数作为参数放入另外一个函数中.
#不改变原函数的代码的情况下统计函数执行所需的时间 #不改变原来的函数功能,但是每次都要执行该函数 #这里要统计时间的时候,每次都要调用deco()函数
  • 这样也有一个问题,就是每次要完成统计功能的时候都要调用deco()函数.
4.使用装饰器,既不改变原来函数的功能,又不需要重复调用deco()函数
# 既不需要入侵原函数,也不用重复调用
 
#声明myfunc()是一个装饰器函数

这里的deco函数就是最原始的装饰器,它的参数是一个函数,然后返回值也是一个函数。其中作为参数的这个函数func()就在返回函数wrapper()的内部执行。然后在函数func()前面加上@deco,func()函数就相当于被注入了计时功能,现在只要调用func(),它就已经变身为“新的功能更多”的函数了。所以这里装饰器就像一个注入符号:有了它,拓展了原来函数的功能既不需要侵入函数内更改代码,也不需要重复执行原函数。

6.带有多个不定参数的装饰器
#带有不定参数的装饰器
7.如果要为函数添加多个功能,这时就需要为函数添加多个装饰器
25.python中有几种跳出双重循环的方法
  • 运用函数的return语句,把for循环封装为一个函数
  • 定义一个标志位,当内层循环结束的时候,同时结束外层循环
# 先判断标志位,是否要继续进行循环 # 内层循环更改标志位的值,通知外层循环可以终止
  • 用 break 关键字终止当前循环就不会执行当前的 else 语句,而使用 continue 关键字快速进入下一轮循环,或者没有使用其他关键字,循环的正常结束后,就会触发 else 语句。


  • 大体上分为三种(位置传参和关键字传参以及综合传参)
    位置传参又包含普通位置传参和序列传参(也是位置传参的一种)
    关键字传参又包含普通的关键字传参和字典传参
    综合传参是以上传参的方式混合使用
1.位置传参(实参和形参按照对应的位置进行传参)
2.序列传参(将实参序列按照*进行拆解,然后按照对应的位置进行传参)
3.关键字传参(按照形参的名称对形参进行赋值,实参和形参一一进行匹配)
# 此示例示意关键字传参
4.字典传参(是指实参为字典,将字典用**进行拆分后按照关键字传参的方式)

1> 字典的键名和形参名必须一致,字典的键名要在形参当中
2>字典的键名必须为字符串

# 此示例示意字典关键字传参
  • 函数的传参方式在能够确定形参能够唯一匹配到当前实参的情况下可以任意的组合.

位置传参在前,关键字传参在后.

myfunc(*"AB",300)#正确,前面是星号序列传参,位置传参,后面也是位置传参
  • 列表推导式 + filter + lambda 表达式实现数据列表的奇数和偶数分离
# 创建一个列表存放输入的数据,然后将数据按奇数和偶数分离成两个列表,返回给主函数
 # 存放输入的数据列表,这里我们直接生成
 # 将这个列表拆分成奇数和偶数列表,filter返回的是一个可迭代对象

1> 调用的时候可以不提供参数,使用默认的缺省参数就可.
2>缺省参数必须从右到左边依次存在,如果一个参数是缺省参数,则它的右边必须全部是缺省参数.
右边可以有可变参数,命名关键字参数,字典双星参数.
3>缺省参数可以有1个或多个,甚至可以全部是缺省参数.

*收集多余的位置传参.

  • 写一个函数可以接收n个参数,然后返回这些参数的和
# args实际上是一个元组

作用:强制*后面的参数必须是关键字传参.字典传参也是关键字传参的一种

    作用: 收集多余的关键字传参
# 双星号字典形参的用法
 ''' kwargs是一个字典,里面用键值对的方式存放了参数名称和对应的值
 作用就是收集多余的关键字参数
# 多余的关键字传参的个数是: 3
# *args是星号元组传参,会收集前面n个位置传的形参,a必须是命名关键字形参.
    python中参数传递的一般顺序是:
    位置传参 > 默认参数 > 星号元组传参 > 命名关键字传参 > 双星号字典传参

Python中的模块是一个以.py结尾的文件,里面包含了Python的对象定义和语句定义.
使用模块,可以让我们的代码的逻辑更加的清晰,使得代码的书写更加的规范.我们可以将我们的类
函数,语句,变量定义到一个模块当中,同时也可以使得代码的复用更加的简单.

在解析器的内部就可以直接使用
安装python时已经安装直接可以使用
需要自己安装之后才可以使用
需要自己手动导入才可以使用
将一个模块整体导入到当前模块
导入模块的1个或多个属性
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...

  • 斜阳拉倩影,月度几人秋? 悄问同心锁,生生世不休。 ——柳公子 新韵 平起

  • 人生在世,就算不牛逼,可总还是想要装逼的吧T-T。这几天因为一直装逼不成,所以打算起码要写一篇如何牛逼的文章装下逼...

  • 吃饱了,就要躺着风里消化,不能大动,累的慌![抠鼻][抠鼻][抠鼻] 错峰出行,没人用院子的时候,自己一个人享用,...

  • (1)积分当函数,利用函数思维 (2)积分当积分,利用积分技巧 变量替换分部积分一二重积分互相转化 例:(二重)证...

}

我要回帖

更多关于 m98调用子程序实例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信