1. 集合

主要作用:

  1. 去重
  2. 关系测试, 交集\差集\并集\反向(对称)差集

2. 元组  

只读列表,只有count, index 2 个方法

作用:如果一些数据不想被人修改, 可以存成元组,比如身份证列表

3. 字典

key-value对

  1. 特性:
  2. 无顺序
  3. 去重
  4. 查询速度快,比列表快多了
  5. 比list占用内存多
 

为什么会查询速度会快呢?因为他是hash类型的,那什么是hash呢?

  哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法

dict会把所有的key变成hash 表,然后将这个表进行排序,这样,你通过data[key]去查data字典中一个key的时候,python会先把这个key hash成一个数字,然后拿这个数字到hash表中看没有这个数字, 如果有,拿到这个key在hash表中的索引,拿到这个索引去与此key对应的value的内存地址那取值就可以了。

函数和过程

#函数
def func1():
"""testing1"""
print('in the func1')
return 0 #过程 即没有返回值的函数
def func2():
"""testing2"""
print('in the func2') x=func1()
y=func2() print('from func1 return is %s'%x)
print('from func2 return is %s'%y)

以上代码运行结果

in the func1
in the func2
from func1 return is 0
from func2 return is None

函数调用

函数传参数传的引用,没有再创建一个参数。

函数传的参数,一旦遇到等号,参数就不在引用,而是将参数赋值,与之前引用的无关。

def func1(arg):
if len(arg) > 2:
del arg[2:] def func2(arg):
arg = 123 li = [11,22,33]
func1(li)
print(li)
func2(li)
print(li)

以上代码执行结果

[11, 22]
[11, 22]

例一:

def test(x,y):
print('x=%d'%x)
print('y=%d'%y) test(y=2,x=1)#指定参数调用,与形参顺序无关

以上代码运行结果

x=1
y=2

例二:

def test(x,y):
print('x=%d'%x)
print('y=%d'%y) test(1,2) #普通参数调用,实参与形参位置一一对应

以上代码运行结果

x=1
y=2

例三:

def test(x,y,z):
print('x=%d'%x)
print('y=%d'%y) test(3,z=2,y=6)#指定参数要放在普通参数的后面

以上代码运行结果:

x=3
y=6

返回值

# -*- coding: utf-8 -*-

def test1():
print('in the test1')
# return 0 def test2():
print('in the test2')
return 0
def test3():
print('in the test3')
return 1,'hello',['a','b','c'],{'name':'alex'},test2 x=test1()
y=test2()
z=test3() print(x)
print(y)
print(z)

以上代码运行结果

in the test1
in the test2
in the test3
None
0
(1, 'hello', ['a', 'b', 'c'], {'name': 'alex'}, <function test2 at 0x00000160332DF268>)
返回值
1. 一旦你的函数经过调用并开始执行,那你的函数外部的程序,就没有办法再控制函数的执行过程了
此时外部程序只能安静的等待函数的执行结果,为啥要等待函数结果,因为外部函数要根据函数的执行结果来决定
下一步怎么走,这个执行结果就是以return的形式返回给外部程序
2. return代表着一个函数的结束
3. return可以返回任何数据类型
4. 对于用户角度,函数可以返回任意数量的值,但对于py本身来讲,函数只能返回一个值。

默认参数

默认参数特点:调用函数的时候,默认参数非必须传递,当函数里有默认参数和普通参数时,默认参数放在最后面。
用途:1.默认值

def test(x,y=2):
print(x)
print(y) test(1,3)

以上代码运行结果

1
3

动态参数

形参:*args,实参:*列表

形参:**kwargs,实参:**字典

*args:接受N个普通参数,转换成元组的形式

def func(*args):
print(args) li = [11,22,33] func(li)
func(*li)

以上代码运行结果

([11, 22, 33],)
(11, 22, 33)

**kwargs:接受N个指定参数,转换成字典的方式
例一:

def func(**kwargs):
print(kwargs) dic = {'k1':11} func(k1=dic)
func(**dic)

以上代码运行结果

{'k1': {'k1': 11}}
{'k1': 11}

例二:

def test4(name,age=18,**kwargs):
print(name)
print(age)
print(kwargs) test4('alex',sex='m',hobby='tesla',age=23)

以上代码运行结果

alex
23
{'hobby': 'tesla', 'sex': 'm'}

例三:

万能参数,*args,*kwargs

*args,**kwargs必须在最后面

def test4(name,age=18,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs) test4('alex',32,'fds','hh',sex='m',hobby='tesla')

以上代码运行结果

alex
32
('fds', 'hh')
{'sex': 'm', 'hobby': 'tesla'}

局部变量&全局变量

PERSON = 'zhou'
def func1():
a = 123
global PERSON
PERSON = 'zzm'
print(a) def func2():
a = 456
print(PERSON)
print(a) func1()
func2()

以上代码执行结果

123
zzm
456

lambda匿名函数

冒号左边传参数,右边传return值

def f1():
return 123 f2 = lambda : 123 def f3(a1,a2):
return a1 + a2 f4 = lambda a1,a2 : a1 + a2 print(f1(),f2())
print(f3(1,2),f4(1,2))

以上代码执行结果:

123 123
3 3

实例:

lambda结合三元运算

data = map(lambda n: n*2 if n>5 else n ,range(10))
print(list(data))

以上代码运行结果

[0, 1, 2, 3, 4, 5, 12, 14, 16, 18]

函数名作参数

def f1():
return "F1" def f2(arg):
print(arg())
return 'F2' f2(f1)

f1 = f1函数

f2 = f2函数

以上代码执行结果

F1

嵌套函数

name = 'Alex'
def changeName():
name = 'Jack'
print(name)
def changeName2():
name = "Rain"
print("name2",name)
changeName2() changeName()

以上代码运行结果

Jack
name2 Rain

二分查找

data = range(0,1000000)
# data.sort()
print(data)
def binary_search(datasets,find_num):
if len(datasets)>0:
middle_pos = int(len(datasets)/2)
if datasets[middle_pos] == find_num:
print("Find num:",datasets[middle_pos])
elif datasets[middle_pos] > find_num:
print("going to left side",datasets[middle_pos])
binary_search(datasets[0:middle_pos],find_num)
else:
print("going to right side",datasets[middle_pos])
binary_search(datasets[middle_pos+1:],find_num)
else:
print("cannot find %d",find_num)
binary_search(data,5100)

以上代码运行结果

range(0, 1000000)
going to left side 500000
going to left side 250000
going to left side 125000
going to left side 62500
going to left side 31250
going to left side 15625
going to left side 7812
going to right side 3906
going to left side 5859
going to right side 4883
going to left side 5371
going to left side 5127
going to right side 5005
going to right side 5066
going to right side 5097
going to left side 5112
going to left side 5105
going to left side 5101
going to right side 5099
Find num: 5100

递归

利用递归获取斐波那契数列中的第 10 个数,并将该值返回给调用者。

def fib(a1,a2,a3):
if a3 == 10:
return a1
r = fib(a2,a1+a2,a3+1)
return r
print(fib(0,1,1))

以上代码运行结果

34

总结递归调用:

1、进入下一次递归时,问题的规模必须降低

2、递归调用必须有一个明确的结束条件

3、在python中没有尾递归优化,递归调用的效率就不高。

高阶函数

def add(x,y,f):
return f(x) + f(y) def calc(n):
return n+1 res = add(3,-6,calc)
print(res)

以上代码运行结果

-1

内置参数

abs(),绝对值

#绝对值
i = abs(-123)
print(i)

以上代码执行结果:

123

真:每个元素都为True

假:0,None,'',[],()

all(),循环参数,如果每个元素都为真,那么all的返回值为真。

any(),只要有一个为真,则为真。

ascii(),到对象的类中找__repr__,获取其返回值。

class Foo:
def __repr__(self):
return 'hello' ret = ascii(Foo())
print(ret)

以上代码执行结果:

hello

十进制转其它进制

# bin()   二进制
r = bin(11)
print(r) # oct() 八进制
r = oct(8)
print(r) # int() 十进制
r = int(10)
print(r) # hex() 十六进制
r = hex(10)
print(r)

以上代码执行结果

0b1011
0o10
10
0xa

其它进制转十进制

i = int('0b11',base=2)
print(i) i = int('0o11',base=8)
print(i) i = int('0x11',base=16)
print(i)

以上代码执行结果

3
9
17

bool(),判断真假,把一个对象转换成布尔值。

bytes()

# 字符串转字节
b = bytes('zbc',encoding='utf8')
print(b)
# 字节转字符串
b=b.decode(encoding='utf8')
print(b)

以上代码执行结果:

b'zbc'
zbc

chr(),ord()

# chr把0-255数字转换成ascii里对应的字符
c =chr(67)
print(c)
# ord把字符转换成ascii里对应的0-255数字
b = ord('C')
print(b)

以上代码运行结果:

C
67

随机验证码

import random
c=''
for a in range(4):
num = random.randrange(0,4)
if num == 1 or num == 3 :
k = str(random.randrange(0,10))
c = c + k
else:
j = random.randrange(65, 91)
c = c + chr(j) print(c)

divmod(),计算商和余数

r = divmod(102,10)
print(r)

以上代码执行结果

(10, 2)  

eval(),可以执行一个字符串形式的表达式

a = "1+3"
print(eval(a))
print(eval('a + 60',{'a':99}))

以上代码执行结果

4
159

exec,执行py代码

exec('for i in range(10):print(i)')

以上代码执行结果

0
1
2
3
4
5
6
7
8
9

comple,编译

filter(函数名,可迭代的对象)

Return an iterator yielding those items of iterable for which function(item)
is true. If function is None, return the items that are true.

将符合条件的值过滤出来。

ret = filter(lambda arg:arg>22,[11,22,33])
for i in ret:
print(i)

以上代码执行结果

33

map(函数名,可迭代的对象)

ret = map(lambda arg:arg*2,[11,22,33])
for i in ret:
print(i)

以上代码执行结果

22
44
66

locals()局部变量,globals()全局变量

def f1():
name = 123
print(locals())
print(globals()) f1()

以上代码执行结果

{'name': 123}
{'__file__': 'E:/python/day1/s5.py', '__doc__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000023922166D30>, 'Foo': <class '__main__.Foo'>, '__cached__': None, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, '__package__': None, 'f1': <function f1 at 0x0000023922067F28>, '__spec__': None}

hash()

字典的key做hash,存在内存里节约空间,并且做了索引,可以快速找到,可以说是key的优化

dic = {
'dsfdgfdgdfgads23gthgf':1,
}
i = hash('dsfdgfdgdfgads23gthgf')
print(i)

isinstance()

li = [11,22]
# 判断某个对象是否是某个类创建的
r = isinstance(li,list)
print(r)

以上代码执行结果

True

iter()迭代器,next()取可迭代对象里的值

obj = iter([11,22,33])
print(obj)
r1 = next(obj)
print(r1)

以上代码执行结果

<list_iterator object at 0x0000026A1AB5DD68>
11

round(),四舍五入

r = round(3.6)
print(r)

以上代码执行结果

4 

zip()

l1 = [1,2,3,4]
l2 = ['a','b','c']
r = zip(l1,l2)
print(r)
for i in r:
print(i)

以上代码执行结果

<zip object at 0x0000019083649CC8>
(1, 'a')
(2, 'b')
(3, 'c')

sorted(),字符串和数字不能放在一起排序

li = ['','gbb','','','','','ds']
print(sorted(li))

以上代码执行结果

['', '', '', '', '', 'ds', 'gbb']

Python基础四的更多相关文章

  1. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  2. Python基础(四) 基础拾遗、数据类型进阶

    一.基础拾遗 (一).变量作用域 外层变量,可以被内层变量直接调用:内层变量,无法被外层变量使用.这种说法在其它语言中适用,在python中除了栈以外,正常的变量作用域,只要执行声明并在内存中存在,该 ...

  3. 【笔记】Python基础四:迭代器和生成器

    一,迭代器协议和for循环工作机制 (一),迭代器协议 1,迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stopiteration异常,以终止迭代(只能往 ...

  4. python 基础(四) 函数

    函数 一.什么是函数? 函数是可以实现一些特定功能的 小方法 或者是小程序 优点: 提高 了代码的后期维护 增加了代码的重复使用率 减少了代码量 提高了代码可读性 二.函数的定义 使用 def关键+函 ...

  5. python基础四(json\os\sys\random\string模块、文件、函数)

    一.文件的修改 文件修改的两种思路: 1.把文件内容拿出来,做修改后,清空原来文件的内容,然后把修改过的文件内容重新写进去. 步骤: 1.打开文件:f=open('file','a+')  #必须用a ...

  6. python基础(四)运算

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python的运算符和其他语言类似 (我们暂时只了解这些运算符的基本用法,方便我们 ...

  7. python基础四-文件读取

    文件读取 open()接受一个参数:要打开的文件名, 并返回一个表示文件的对象, 存储到后面的变量中 python会在当前执行文件所在目录查找 可以使用绝对路径, 在linux中使用'/', 在win ...

  8. Python基础(四) socket简单通讯

    socket:我们通常听过的套接字: 服务端: 1.创建socket对象 2.bing 绑定ip及端口 3.对该端口进行监听 4.消息阻塞(等待客户端消息) 客户端: 1.创建socket对象 2.连 ...

  9. python基础(四)字符串处理

    字符串处理 msg = 'my name is sylar' capitalize方法,将字符串的首字母大写 print 'capitalize方法:', msg.capitalize() swapc ...

随机推荐

  1. .Net的内置对象之一 Request

    一.Request简介 Request对象是.net的内置对象之一,也是.net中常用的对象,用于获取客户端的信息,可以使用Request对象访问任何基于HTTP请求传递的所有信息.通过Request ...

  2. BOM浏览器对象模型

    访问和操作浏览器窗口的模型称为浏览器对象模型BOM(Browser Object Model). BOM整体对象图. 核心是window对象: 以下有特殊双重身份: window对象既是ECMAScr ...

  3. Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录

    转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50511172 本文出自:[lxk_1993的博客]:   3个错误non-zero e ...

  4. js动态创建style节点(js文件中添加css)

    ie6 不能 document.createElement('style') 然后append到head标签里.所以就找到这样个好文章 --------------------- 有很多提供动态创建 ...

  5. PHP 常用框架

    1.ThinkPHP 2.Yii2 3.Laravel 4.CodeIgniter 5.CakePHP

  6. 解决 PHPExcel 长数字串显示为科学计数

    解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...

  7. logging 模块

    import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname) ...

  8. 顺序表java实现

    public class SeqList { Object[] data; int maxSize; int length; public SeqList(int maxSize) { this.ma ...

  9. js鼠标事件大全

    一般事件 事件 浏览器支持 描述 onClick HTML: 2 | 3 | 3.2 | 4 Browser: IE3 | N2 | O3 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击 onDb ...

  10. CodeForces 548D 单调栈

    Mike and Feet Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Subm ...