Python 3.6学习笔记(一)
知识是一座宝库,而实践就是开启这座宝库的钥匙。
----Thomas Fuller
开始之前
基础示例
Python语法基础,python语法比较简单,采用缩紧方式。
# print absolute value of a integer
a = 100
if a >= 0:
print(a)
else:
print(-a)
可以看到,注释以#开头,python的变量不需要任何前缀,行结束不需要结束符号,非常符合我们自然语言的阅读和书写习惯。当语句以:
结尾时,缩紧的语句视为代码块。
Python是大小写敏感的,这一点需要特别注意。
输入与输出
Python可以使用input()函数读取用户的输入,使用print()进行屏幕的输出。默认情况下,输入的内容为字符数据类型。
数据类型
整数
Python可以处理任意大小的整数,在程序中的表示方法和数学上的写法一模一样,可以使用0xff00
的方式表示十六进制。
Python中使用/进行除法运算,得到的结果是浮点数。使用//进行除法运算,得到的结果是整数。使用%,表示取余数。
浮点数
浮点数就是小数,可以使用数学写法,如:1.23
,-9.01
,也可以使用科学计数法表示,如:1.23e9
,1.2e-5
。
字符串
字符串是使用`或”括起来的任意文本。可以使用*对特殊字符进行转义。可以使用r''的形式,表示内部的字符串默认不进行转义。对于字符串内有换行等多行内容的,可以使用’’’…’’’的形式,多行字符前也可以加r*。
在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符。以Unicode表示的str通过encode()方法可以编码为指定的bytes,如:
>>> 'ABC'.encode('ascii’)
。反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法
在Python中,采用的格式化方式和C语言是一样的,如下:
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
布尔值
布尔值:True、False。也可以用布尔代数表示:3 > 2,* 3 < 2。布尔值的运算符号:and、or、not*。
空值
空值是Python里一个特殊的值,用None表示。
变量
Python中的变量时动态变量,即变量的属性是在赋值的时候才决定的,变量名称必须是大小写英文、数字和_的组合,且不能用数字开头。Python中没有常量的概念,通常使用全部大写的变量来表示常量。
列表 list
list 是一种有序的集合,可以随时添加和删除其中的元素。用索引来访问list中每一个位置的元素,索引是从0开始的。当索引超出了范围时,Python会报一个IndexError错误。如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素。
>>> classmates = [‘Michael’,’Bob’,’Tracy']
>>> classmates
[‘Michael’,’Bob','Tracy’]
>>> len(classmates)
3
>>> classmates[0]
‘Michael’
>>> classmates.append('Adam’) #追加元素到末尾
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam’]
>>> classmates.insert(1, 'Jack’) #追加元素到指定位置
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', ‘Adam’]
>>> classmates.pop() #删除末尾的元素,使用pop(i)可以删除指定位置的元素
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
元组 tulp
元组 tulp 也是有序列表,与list的区别在于,一旦初始化就不能修改。没有append、insert等方法。
tulp的定义方式如下:
>>> classmates = (‘Michael’, ‘Bob’, ’Tracy')
tulp 本身的元素不能发生变化,但是如果元素为list,那么list中的内容是可变的。
字典 dict
dict 全称 dictionary ,在其他语言中称为 map,在PHP中其实就是 Array,使用键-值(Key-Value)的方式进行存储,具有极快的查找速度。使用范例
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} #dict的定义
>>> d['Michael’] #dict取值的方式
95
>>> d['Adam'] = 67 #dict设置新值的方式
>>> 'Thomas' in d #判断key是否存在
False
>>> d.get('Thomas’) #get方式取值,如果不存在则返回None
>>> d.get('Thomas',-1)#指定不存在时的返回值
-1
>>> d.pop('Bob’) #删除某个key
75
set
set和dict类似,也是一组key的集合,但不存储value。如下示例:
>>> s = set([1, 2, 3]) #初始化时提供一个list作为输入集合
>>> s
{1, 2, 3}
>>> s.add(4) #使用add方法添加元素
>>> s
{1, 2, 3, 4}
>>> s.remove(2) #使用remove方法
>>> s
{1, 3, 4}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。
控制语句
条件判断
条件判断比较简单,主要是不要忘记写:
,看看例子吧。
>>> age = 3
>>> if age >= 18:
... print('your age is', age)
... print('adult')
... else:
... print('your age is', age)
... print('teenager')
...
your age is 3
teenager
更多的条件判断。
>>> age = 3
>>> if age >= 18:
... print('adult')
... elif age >= 6:
... print('teenager')
... else:
... print('kid')
...
kid
循环
Python中的循环有两种,一种是for...in循环,依次把list或tulp中的每个元素迭代出来。
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
>>> for name in classmates:
... print(name)
...
Michael
Jack
Bob
Tracy
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
跳出循环,可以使用 break 跳出循环。
跳过本次循环,可以使用 continue 跳过本次循环,继续下一次循环。
函数
调用函数
Python中内置了很多函数,可以直接调用。在交互模式中,可以通过help(abs)
查看函数的用法。
定义函数
在Python中,定义一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
示例如下:
def my_abs(x):
if x >= 0:
return x
else:
return -x
在Python交互环境中定义函数时,注意Python会出现
…
的提示。函数定义结束后需要按两次回车重新回到>>>提示符下。
返回多个值
在其他语言中,一般只能返回一个值或者一个数组、对象,在Python中,可以通过tulp变通的返回多个值。
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
位置参数
Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
def power(x): #x 就是一个位置参数
return x * x
def power(x, n): #x,n都是位置参数
s = 1
while n > 0:
n = n - 1
s = s * x
return s
def power(x, n=2): #x,n都是位置参数,n设置了默认值
s = 1
while n > 0:
n = n - 1
s = s * x
return s
有几点要注意:
一是必选参数在前,默认参数在后,否则Python的解释器会报错
二是当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
有多个默认参数时,调用的时候,既可以按顺序提供默认参数。也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。
需要注意的是:默认参数必须指向不变对象!
可变参数
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*
号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数。Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去。
关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
关键字参数有什么用?它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
#可以先组装出一个dict,然后,把该dict转换为关键字参数传进去
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
#简化的写法
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': ‘Engineer'}
extra表示把extra这个dict的所有key-value用关键字参数传入到函数的kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
命名关键字参数
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下。命名关键字参数需要一个特殊分隔符*
,*
后面的参数被视为命名关键字参数。
def person(name, age, *, city, job):
print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了。
def person(name, age, *args, city, job):
print(name, age, args, city, job)
参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
参考资料:
1、廖雪峰的Python教程
Python 3.6学习笔记(一)的更多相关文章
- Requests:Python HTTP Module学习笔记(一)(转)
Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- Python Built-in Function 学习笔记
Python Built-in Function 学习笔记 1. 匿名函数 1.1 什么是匿名函数 python允许使用lambda来创建一个匿名函数,匿名是因为他不需要以标准的方式来声明,比如def ...
- Python快速入门学习笔记(二)
注:本学习笔记参考了廖雪峰老师的Python学习教程,教程地址为:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb49318210 ...
- python数据分析入门学习笔记
学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...
- python网络爬虫学习笔记(二)BeautifulSoup库
Beautiful Soup库也称为beautiful4库.bs4库,它可用于解析HTML/XML,并将所有文件.字符串转换为'utf-8'编码.HTML/XML文档是与“标签树一一对应的.具体地说, ...
- Python之xml学习笔记
XML处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过&l ...
- python网络爬虫学习笔记(一)Request库
一.Requests库的基本说明 引入Rquests库的代码如下 import requests 库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个 ...
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
- python数据分析入门学习笔记儿
学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据 ...
随机推荐
- LoadRunner中Action的迭代次数的设置和运行场景中设置
LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢? ...
- Java去重字符串的两种方法以及java中冒号的使用
package com.removesamestring; import java.io.BufferedWriter; import java.util.ArrayList; import java ...
- 微信JS-SDK之图像接口开发详解
由于现在手头的项目中有一个上传证件照认证的功能(手机端),之前的思路是直接点击上传,然后直接将图片上传到服务器去,这篇文章有讲到(http://www.cnblogs.com/it-cen/p/453 ...
- 关于CSRF的那点事儿
0x01 CSRF简介 CSRF,也称XSRF,即跨站请求伪造攻击,与XSS相似,但与XSS相比更难防范,是一种广泛存在于网站中的安全漏洞,经常与XSS一起配合攻击. 0x02 CSRF原理 ...
- Python时间日期格式化之time与datetime模块总结
1 引言 在实际开发过程中,我们经常会用到日期或者时间,那么在Python中我们怎么获取时间,以及如何将时间转换为我们需要的格式呢?在之前的开发中,也曾遇到time.datetime等模块下的不同函数 ...
- MDP中值函数的求解
MDP概述 马尔科夫决策过程(Markov Decision Process)是强化学习(reinforcement learning)最基本的模型框架.它对序列化的决策过程做了很多限制.比如状态 ...
- Javap -c 字节码解析
栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 icon ...
- android activity 窗口 样式
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 将 活动 设置成 窗口样式, 可以设置 主题 为 对话框, 或者 半透明. 安卓:主题= ...
- 数据库中drop、delete与truncate的区别
数据库中drop.delete与truncate的区别 drop直接删掉表: truncate删除表中数据,再插入时自增长id又从1开始 :delete删除表中数据,可以加where字句. (1) D ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...