Python学习笔记二(高级特性)

Python学习笔记二(高级特性)本文主要对Python的函数调用的使用进行讲解。

大家好,又见面了,我是你们的朋友全栈君。

      学习Python学习笔记一(基础知识),下面学习Python的高级特性

     1. 切片         

#取一个list或tuple的部分元素是非常常见的操作,即输出第0,1,2三个元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

# 方法一:
print([L[0], L[1], L[2]])

# 方法二:
r = []
n = 3
for i in range(n):
    r.append(L[i])

print(r)

# 方法三:
print(L[0:3])
#如果第一个索引是0,还可以省略:
print(L[:3])

print(L[2:3])

    输出结果:
     

['Michael', 'Sarah', 'Tracy']
['Michael', 'Sarah', 'Tracy']
['Michael', 'Sarah', 'Tracy']
['Michael', 'Sarah', 'Tracy']
['Tracy']

2.迭代

  类似于java的for…each方法,任何可迭代对象都可以作用于
for循环,包括我们自定义的数据类型,只要符合迭代条件(即
Iterable类型的对象),就可以使用
for循环。
 

print("#dict遍历")
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print(key)

print("#字符串遍历")
for ch in 'ABC':
    print(ch)

print("#输出下标值")
for i, value in enumerate(['A', 'B', 'C']):
    print(i, value)

print("同时遍历两个元素")
for x, y in [(1, 1), (2, 4), (3, 9)]:
    print(x, y)

    输出结果:
   

#dict遍历
a
b
c
#字符串遍历
A
B
C
#输出下标值
0 A
1 B
2 C
同时遍历两个元素
1 1
2 4
3 9

  3.列表生成式  

print("#列表生成式")
print([x * x for x in range(1, 11)])

   输出结果: 

#列表生成式
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  4.生成器

    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。


print("#生成器")
g = (x * x for x in range(10))

print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))

print("for循环遍历")
g = (x * x for x in range(10))
for n in g:
    print(n)

输出结果:

 

#生成器
0
1
4
9
16
for循环遍历
0
1
4
9
16
25
36
49
64
81

5.迭代总结 

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象;

Python的for循环本质上就是通过不断调用next()函数实现的。

6. 函数式编程

    函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。允许把函数本身作为参数传入另一个函数,还允许返回一个函数,即函数本身也可以赋值给变量,即:变量可以指向函数。

 

print("#函数为变量")
f = abs
print(f(-10))

print("#函数作为参数传入")
def add(x, y, f):
    return f(x) + f(y)

print(add(-5, 6, abs))

  输出结果:
#函数为变量10#函数作为参数传入11

7.map/reduce   

print("#map/reduce")
def f(x):
  return x * x

r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

#r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list
print(list(r))

   输出结果: 
#map/reduce[1, 4, 9, 16, 25, 36, 49, 64, 81]

 8.filter

   
filter()的作用是从一个序列中筛出符合条件的元素。由于
filter()使用了惰性计算,所以只有在取
filter()结果的时候,才会真正筛选并每次返回下一个筛出的元素。
print("#去除空字符串")def not_empty(s):    return s and s.strip()r = filter(not_empty, ['A', '', 'B', None, 'C', '  '])print(list(r))

   输出结果:

  

#去除空字符串
['A', 'B', 'C']

  9.排序

print("#python排序")r = sorted([36, 5, -12, 9, -21])print(r)print("#根据abs结果排序")r = sorted([36, 5, -12, 9, -21], key=abs)print(r)print("#字符串排序")#默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面r= sorted(['bob', 'about', 'Zoo', 'Credit'])print(r)print("#不区分大小写字符串排序")r= sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)print(r)

  输出结果: 

#python排序[-21, -12, 5, 9, 36]#根据abs结果排序[5, 9, -12, -21, 36]#字符串排序['Credit', 'Zoo', 'about', 'bob']#不区分大小写字符串排序['about', 'bob', 'Credit', 'Zoo']

   10.匿名函数

  

print("#匿名函数")
print(list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])))

 输出结果:

 

#匿名函数
[1, 4, 9, 16, 25, 36, 49, 64, 81]

   11.装饰器

         python装饰器自己的理解非常类似于java的aop拦截器
    

import time
def now():
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))


f = now
print("打印当前时间")
f()
print("输出函数名称")
print(now.__name__)


# wrapper()函数的参数定义是(*args, **kw),因此,wrapper()函数可以接受任意参数的调用

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

# 在wrapper()函数内,首先打印日志,再紧接着调用原始函数。
@log
def now():
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))

print("python装饰功能测试验证,相当于now=log(now)")
now()

# 传入参数的log
def log(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

@log("打印当前时间方法")
def now():
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())))


print("python装饰功能测试验证,相当于now = log('execute')(now)")
now()

   输出结果:
打印当前时间
2017-03-28 16:11:25
输出函数名称
now
python装饰功能测试验证,相当于now=log(now)
call now():
2017-03-28 16:11:25
python装饰功能测试验证,相当于now = log('execute')(now)
打印当前时间方法 now():
2017-03-28 16:11:25






    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149563.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言中位运算符的用法_c语言中位运算符的优先级

    c语言中位运算符的用法_c语言中位运算符的优先级位 运 算一直对位运算头疼,在此总结一下   程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。运位算包括位逻辑运算和移位运算,位逻辑运算能够方便地设置或屏蔽内存中某个字节的一位或几位,也可以对两个数按位相加等;移位运算可以对内存中某个二进制数左移或右移几位等。计算机内部是以补码形式存放数值的。C语言提供了六种位运算位运算符含义…

    2022年10月5日
    2
  • 汉诺塔递归算法流程图_汉诺塔算法递归表达式

    汉诺塔递归算法流程图_汉诺塔算法递归表达式(5)练习3—汉诺塔(Hanoi)编程实现把A的n个盘子移动到C(盘子编号是[1,n])每次只能移动1个盘子大盘子只能放在小盘子下面1、汉诺塔—1个盘子2、汉诺塔—2个盘子3、汉诺塔—3个盘子3、汉诺塔—思路其实分2种情况讨论即可(1)当n==1时,直接将盘子从A移动到C(2)当n>1时,可以拆分成3大步骤①将n–1个盘子从A移动到B②将编号为n的盘子从A移动到C③将n–1个盘子从B移动到C

    2025年8月5日
    3
  • 什么是Promise,Promise的三种状态[通俗易懂]

    什么是Promise,Promise的三种状态[通俗易懂]什么是Promise对象:Js中进行异步编程的新的解决方案(传统的解决方案——回调函数和事件),用于表示一个异步操作的最终完成(或失败),及其结果值.。 语法上:promise是一个构造函数 简单来说,promise对象用来封装一个异步操作并可以获取其结果语法:newPromise(function(resolve,reject){…}/*e…

    2022年5月10日
    75
  • Java BigDecimal详解

    Java BigDecimal详解1.引言       借用《EffactiveJava》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。 2.BigD

    2022年6月7日
    36
  • springboot和springmvc的区别

    springboot和springmvc的区别面试题:你知道springboot和springmvc的区别是什么?之前自己搭过springboot的相关项目,但是如何进行比较,从自我感觉来看就是使用springboot用起来几乎没有配置,个人搭的项目没有用到配置相关的内容。于是我就用了这个回答给面试官,可想而知,这种回答并不好。于是现在百度了相关文章,就把理解写成博客当做笔记。springmvc从两个方面…

    2022年6月10日
    38
  • 矩阵分析 (二) 内积空间「建议收藏」

    矩阵分析 (二) 内积空间「建议收藏」内积空间的基本概念定义2.1:设VVV是实数域PPP上的线性空间,如果对于VVV中任意两个元素α\alphaα,β\betaβ都有一个实数(α,β)(\alpha,\beta)(α,β)与它们对应,并且满足下面的四个条件,则(α,β)(\alpha,\beta)(α,β)称为元素α\alphaα,β\betaβ的内积:1):对于任意的α,β\alpha,\betaα,β:(α,β)=(β…

    2022年10月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号