学习了的这几天来,觉得还是比较简单,容易上手的 , 就基本语法而言,但是有些高级特性掌握起来还是有些难度,需要时间去消化 。给我最大的印象就是语法简洁,就像写伪代码一样,很多其他语言要用很多行才能实现的操作可能几行就搞定了 , 这让人摆脱了繁杂的语法而专注于问题本身 , 这也正是我为什么不太喜欢Java的原因之一,虽然它很强大 。
一、基础语法要点
1.如果一个字符串中有许多需要转义的字符,而又不想写那么多\,那么可以用r'...'表示'...'内的内容不转义 。
2.可用'''...'''来表示多行内容 , 如:
3.的逻辑运算and, or, not 分别对应C语言中的&&, ||, !.
4.的整数与浮点数大小都没有范围 。
5.中除法有两种: /除出来必是浮点数, //除出来是整数,即地板除 。
6.中一切皆引用 。每个对象都有一个引用计数器(内部跟踪变量)进行跟踪,引用计数值表示该对象有多少个引用,当初次产生赋给变量时,引用计数为1,其后没进行下列行为中的任意一种都会增加引用计数:
以下任意一种行为都会减少引用计数:
7.深拷贝与浅拷贝的概念与对比 , 有点复杂 , 看这篇文章
8.list,tuple和dict,set
list: 为列表 , 是一个有序集合,类似于数组但又比数组功能强大,可以随时,pop元素,下标从0开始,且下标为加n模n制,即lis[-1] = lis[len-1],下标范围[-len,len-1].
tuple:为元组,类似于list , 但list为可变类型 , 而tuple不可变,即没有,pop等函数 。一个建议是为了安全起见,能用tuple代替list尽量用tuple 。如果tuple只有一个元素 , 要写成如(1,)以避免歧义 。
dict:字典类型,存放key-value键值对,可以根据key迅速地找出value,当然,key必须是不可变类型,如下是错误的:
list与dict的优劣对比:
dict内部存放的顺序和key放入的顺序是没有关系的
set:set与dict类似,相当于只有key没有value的dict , 每个key不同,set间有 &,| 等操作对应集合的交,并操作 。
二 , 函数
1.函数是对象,函数名即是指向对应函数对象的引用,所以可以将函数名赋给一个变量 , 相当于给函数起一个‘别名’ 。
2.函数可以返回“多个值”,之所以打引号 , 是因为实际上返回的多个值拼成了一个元组,返回这个元组 。
3.定义默认参数需要牢记:默认参数必须指向不变对象 。否则第一次调用和第二次调用结果会不一样,因为可变的默认参数调用后改变了 。
4.可变参数:传入的参数个数是可变的,可以是0个或多个 。可变参数会将你传入的参数自动组装为一个tuple 。在你传入的list或tuple名字前加一个 * 即说明传入的是可变参数 。习惯写法为*args 。
5.关键字参数:传入0个或多个含参数名的参数,这些参数被自动组装成一个dict 。习惯写法**kw,如**a表示把a中所有的键值对以关键字参数的形式传入kw,获得一个dict , 这个dict是a的一份拷贝 , 对kw改动不会传递到a
6.命名关键字在函数定义中跟在一个*分割符后,如
文章插图
c,d为命名关键字参数,可以限制调用者可以传入的参数名,同时可以提供默认值 。
7.参数定义顺序:必选参数 , 默认参数,可变参数/命名关键字参数 , 关键字参数 。
8.切片操作格式为lis[首下标:尾下标:间隔],如果都不填,即lis[::]则代表整个容器lis
9.用圆括号()括起来一个列表生成式创建一个生成器,保存生成算法,我们可以用next(g)取得生成器g的下一个返回值 。生成器的好处就是我们不需要提前生成所有列表元素,而是需要时再生成 , 这在某些情况下可以节省许多内存 。算法也可以不是列表生成式而是自定义函数 , 只需在函数定义中包含yield关键字 。
10.map()和(): 二者都是高阶函数 。map()接收两个参数 , 一个是函数,一个是序列,map将传入的函数依次作用在序列每一个元素上 , 并把结果作为新的返回 。()类似累积计算版的map(),把一个函数作用在一个序列上,每次接收两个参数,将结果继续与序列的下一个元素做累积计算 。
利用map和编写一个函数,如把字符串'123.456'转换成浮点数123.456:
11.()函数过滤序列,类似于map()作用于每一元素 , 根据返回值是True或者False决定舍弃还是保留该元素 。函数返回一个 。
12.()函数可实现排序,类似于C++库中的sort()函数 , 但是比其更加简洁,语法为(lis,key=func,=T/F)
key函数可实现自定义的排序规则,表示升序还是降序 。
13.一个函数可以返回一个函数,但是返回时该函数并未执行,所以返回函数中不要引用任何可能发生变化的变量,否则会出现逻辑错误 。
14.装饰器(): 当需要增强函数的功能却不希望修改函数本身 , 那么可以采用装饰器这种运行时动态增加功能的方式,增加的功能卸载装饰器函数中 。如在执行前后打印'begin call'和'end call',可以这样做:
【学完python之后 你真的知道自己到底学了些什么吗?】15.偏函数: .(),作用是将一个函数的某些参数固定?。魑潞牟问? ,即固定住该参数,返回一个新函数,使调用更简单 。
- 货车发动之后不能挂档位怎么回事 货车发动之后不能挂档位怎么回事视频
- 教你用python打造WiFiddos
- 退票之后学生资格算不算 退票后学生资质什么时候才可以回来
- 帝国时代3革命之后资源怎么得 帝国时代3怎么获取资源
- 明日之后配方怎么没有消防斧? 明日之后配方里面怎么没有消防斧
- 【python】爬取酷狗音乐Top500排行榜【附源码】
- 考研之后要上学吗 考研考上之后要去学校上学吗
- 快速查询订单号邮政 快速查询订单号
- 相亲之后微信怎么聊天女生 相亲之后微信怎么聊天
- 孤岛惊魂4怎么才能过国王大桥 孤岛惊魂4打完国王之后