Python基础入门教学

  • 基础中的基础
  • 列表、元组(tuple)、字典、字符串
  • 变量和引用
  • 函数
  • python视频教程渠道

基础中的基础

  • 解释型语言和编译型语言差距;

Python概述

解释器执行原理

which python3可以查看python3的位置(linux下);

交互式环境中使用exit()或者ctrl+D退出;

9 // 2表示取结果的整数,乘方使用**;

乘法可以用在 字符串中 也就是说 "_ " * 5 会输出5个 “_”;

数据类型分为 数字型和非数字型: (1)数字型 : 整形、浮点型、布尔型、复数型。(2)非数字型: 字符串、列表、元组、字典。type(变量名)查看变量类型;
python3中没有long,只有int;

变量的输入: input()函数。注意: input()函数输入的数据类型都是字符串类型;

在python中,如果变量名需要两个或多个单词组成时,可以按照下面的方式: ①每个单词都是小写;②单词和单词之间使用_下划线连接;③使用驼峰规则;

print函数如果不想输出换行,在后面加上一个end=""(例如print(“a”,end=""));单纯的只想输出一个换行可以使用print()或者print("");
\t(制表符(对齐))和\n转义字符;

关于函数的注释,写在函数的下面,加上三个"""。以及文档注释,例如:

 def sum_2_sum(a, b):
"""计算a和b的和
:param a:第一个参数
:param b:第二个参数
:return:
"""
return a + b

因为函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行;
import导入的文件可以python解释器将模块解释成一个pyc二进制文件(类似Java的.class?);
python中关键字后面不需要加括号(如del 关键字);
方法和函数的异同: ①方法和函数类似,同样是封装了独立的功能;②方法需要通过对象来调用,表示针对这个对象要做的操作③函数需要记住,但是方法是对象的"函数",方法不需要记住(IDE提示或者IPython中TAB补全);
变量赋值的几种特殊的方式:

 a = b = c = 1  # 三个都是1
a, b, c = 1, 2, "hello" # a = 1, b = 2, c = "hello" a, b = 0, 1
a, b = b, a+b # 右边表达式的执行顺序是从左往右的。
"""
上面的代码类似:
n = b
m = a+b
a = n
b = m
"""
print(a) #
print(b) #
  • 逻辑运算符:and、or、not,成员运算符in、not in,身份运算符is、is not

列表、元组(tuple)、字典、集合、字符串

  • 列表可以嵌套
 x = [['a', 'b', 'c'], [1, 2, 3]]
print(x[0]) # ['a', 'b', 'c']
print(x[0][1]) # 'b'

元组不同于列表的是: 元组不能修改,用()表示;(不能增删改)
元组一般保存不同类型的数据;
注意: 只有一个元素的元组: single_tuple = (5,) ,也就是说元组中只包含一个元素时,需要在元素后面添加逗号;不能这样写 single_tuple = (5),这样是一个整形的变量;另外,创建元组也可以不加上括号;

 tup = "a", "b", "c", "d"
print(tup)
print(type(tup)) tup2 = ("a",) # 一个元素的元组 (后面必须加上一个括号)
print(tup2)
print(type(tup2))

输出:

 ('a', 'b', 'c', 'd')
<class 'tuple'>
('a',)
<class 'tuple'>
  • 元组的用途: ① 作为函数的参数和返回值;②格式化字符串(格式字符串本身就是一个元组);(3)让列表不可以被修改,保护数据安全;
  • 格式化字符串和元组的关系,看下面的三个print输出是一样的:
 # 元组和格式化字符串的关系
info_tuple = ("小明", 21, 1.85)
print("%s 年龄是 %d 身高是 %.2f" % ("小明", 21, 1.85))
print("%s 年龄是 %d 身高是 %.2f" % info_tuple) info_str = "%s 年龄是 %d 身高是 %.2f" % info_tuple
print(info_str)
  • 元组和列表可以相互转换 : ①使用list(元组)将元组转换成列表;②使用tuple将列表转换成元组;
  • 字典: ① 键必须是唯一的 ②值可以取任意类型,但是键只能使用字符串、数字或者元组(键只能是不可变类型)。
  • **遍历字典的时候for k in dict 中的k是键,而不是值。(普通的for),不过也可以通过items()方法遍历键值对:
 dict_student = {'name': 'xiaoming', 'age': '', 'qq': ""}

 # 遍历方式一
for k in dict_student: # k 是key
print(k, end=" ")
print(dict_student[k]) print("*" * 20)
# 遍历方式二
for k, v in dict_student.items():
print(k, v)

字符串中的转义字符:\n表示换行,而\r表示回车,字符串中的函数isspace()判断的时候\t\n\r都是表示的空白字符;
isdecimla()、isdigit()、isnumeric()都不能判断字符串中的小数,(可以判断字符串中的整数);
集合set的使用: 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 集合还有一些方法add()、update()、pop()等;

 student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student) # 输出集合,重复的元素被自动去掉 if 'Rose' in student:
print('Rose 在集合中')
else:
print('Rose 不在集合中') # set可以进行集合运算
a = set('abracadabra')
b = set('alacazam') print(a - b) # a和b的差集
print(a | b) # a和b的并集
print(a & b) # a和b的交集
print(a ^ b) # a和b中不同时存在的元素

输出:

 {'Jim', 'Mary', 'Jack', 'Rose', 'Tom'}
Rose 在集合中
{'b', 'd', 'r'}
{'b', 'l', 'c', 'd', 'z', 'm', 'a', 'r'}
{'c', 'a'}
{'b', 'm', 'l', 'r', 'd', 'z'}

相关公共方法: len、del、max、min(只会比较字典的key);
in、not in的使用(类似数据库…);
pass关键字的使用: 比如if … 下面没有写语句,python会提示报错,但是你可以写一个pass就不会报错了;也就是说如果在开发程序时,不希望立即编写分支内部的代码,可以使用pass作为一个占位符;可以保证程序代码结构正确;
TODO关键字的使用,在编写程序框架的时候,可以用TODO标示某个地方还没有做某事;
迭代器的使用

 import sys  # 引入 sys 模块

 lst = [1, 2, 3, 4]
it = iter(lst) # 创建迭代器对象 # 使用for 遍历迭代器
for x in it:
print(x, end=" ")
print() it = iter(lst) # 之前那个已经到了最后了,再次获取
# 使用next + while遍历
while True:
try:
print(next(it), end=" ")
except StopIteration: # 防止无限循环
sys.exit() # 退出程序
print()

输出:

 1 2 3 4
1 2 3 4

字符串中切片的使用: ①类似截取,但是可以指定步长;②python中支持倒序索引,最后一个是-1,倒数第二个是-2…;

 # 切片的使用
num_str = "" print(num_str[2:6]) # [2,5]
print(num_str[2:]) # 从2位置到结束
print(num_str[0:6]) # 输出[0,5]的
print(num_str[:6]) # 一开始到5的
print(num_str[:]) # 全部输出
print(num_str[::2]) # 指定步长 第三个参数指定步长
print(num_str[1::2]) # 从第一个开始 步长为2 print("*" * 20)
print(num_str[-1]) # 输出最后一个位置的
print(num_str[2:-1]) # 从第二个开始到倒数第二个 print("*" * 20)
# 一个面试题 逆序输出
print(num_str[-1::-1]) # 步长为-1代表向左切片,从最后一个开始切
print(num_str[::-1])

输出:

 3456
345678
123456
123456
12345678
1357
2468
********************
8
34567
********************
87654321
87654321

变量和引用

变量和数据都是保存在内存中的;
在python中函数的参数传递以及返回值都是引用传递的;
变量和数据是分开存储的;
变量中记录数据的地址,就叫做引用;
使用id()函数可以查看变量中保存的数据所在的内存地址;
注意: 如果变量已经被定义,当给一个变量复制的时候,本质上是修改了数据的引用。① 变量不再对之前的数据引用;②变量改为对新复制的数据引用;
可变类型和不可变类型

不可变类型: 内存中的数据不允许修改:

① 数字类型: int、bool、 float、complex、long
② 字符串 :str
③ 元组 :tuple 可变类型: 内存中的数据可以被修改 ① 列表 list
② 字典 dict
可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a;
不可变类型: 变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

函数参数传递时注意:

不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响;
  • 局部变量和全局变量
局部变量:函数内部定义的变量,只能在函数内部使用;
全局变量: 函数外部定义的变量,所有函数内部都可以使用这个变量;(不推荐使用)

  注意: 在python中,不允许修改全局变量的值,如果修改,会在函数中定义一个局部变量;

 num = 10

 # python中,不允许修改全局变量

 def method1():
num = 99 # 这里没有修改全局变量num,而是自己又定义了一个局部变量,执行完这个函数,局部变量就会回收
print(num) def method2():
print(num) # 虽然在method1中修改了 num 但是却不会修改 method1()
method2() # 输出
#
#
  • 可以使用global关键字修改全局变量的值。
  • 全局变量的命名规则: 前面加上g_ 或者gl_
  • 函数

    • 函数如果返回的是一个元组就可以省略括号;
    • 如果返回的是一个元组,可以使用多个变量直接接收函数的返回结果;(注意变量的个数和返回的元组的个数相同)

    例如:

 ef measure():
"""测量湿度和温度"""
temp = 39
wetness = 50 # 下面返回的是一个元组,为什么写成没有括号的样子,因为如果返回的是一个元组就可以省略括号
# return (temp, wetness)
return temp, wetness res = measure()
print(res)
print(type(res)) # tuple # 很骚的,直接使用多个变量接收函数返回的元组
gl_temp, gl_wetness = measure()
print(gl_temp)
print(gl_wetness)
  • 交换两个变量a、b的值的三种解法(第三种python专用)
 a = 6
b = 100 # 解法1
c = a
a = b
b = c
print(a)
print(b) # 解法2 a = a + b
b = a - b
a = a - b
print(a)
print(b) # 解法3 python专用
# a, b = (b, a)
a, b = b, a
print(a)
print(b)
  • 如果在函数中使用赋值语句,并不会影响调用函数时传递的实参变量;无论传递的参数可变还是不可变;
  • 只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用;

测试:

 def demo(num, num_list):
print("函数内部的代码") num = 100
num_list = [1, 2, 3] print(num)
print(num_list)
print("函数执行完成") gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print(gl_num) #
print(gl_list) # [4, 5, 6]

输出:

 函数内部的代码
100
[1, 2, 3]
函数执行完成
99
[4, 5, 6]

一张图解释:

  • 如果传递的参数是可变类型,在函数内部,使用方法修改了数据的内容,同样会影响到外部的数据。
 def demo(num_list):
print("函数内部的代码")
num_list.append(666)
print(num_list)
print("函数代码执行结束") gl_list = [1, 2, 3]
demo(gl_list)
print(gl_list)

输出:

 函数内部的代码
[1, 2, 3, 666]
函数代码执行结束
[1, 2, 3, 666]

示意图:

上面写了,这里再重复一遍可变类型和不可变类型和参数传递的关系:

不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响;
  • 列表变量调用 += 的时候相当于是调用extend,这个是一个特列;
 def demo(num, num_list):
print("函数开始") # 赋值语句 不会改变外部
num += num # 但是列表是一个特例,+=列表相当于 extend 所以会改变外部
num_list += num_list
# num_list = num_list + num_list # 这样就不会改变实参 print(num)
print(num_list) print("函数结束") gl_num = 9
gl_list = [1, 2, 3] demo(gl_num, gl_list) print(gl_num)
print(gl_list)

输出:

 函数开始
18
[1, 2, 3, 1, 2, 3]
函数结束
9
[1, 2, 3, 1, 2, 3]
  • 缺省参数: ①定义函数时,可以给某个参数指定一个默认值,指定了默认值的参数叫做缺省参数;②一般使用最常见的值作为缺省参数;③缺省参数的定义位置:必须保证带有默认值的缺省参数定义在参数列表的末尾;
 def print_info(name, gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s" % (name, gender_text)) print_info("小明") # 缺省参数 使用最常见的值,作为缺省参数
print_info("小美", False)

还要注意,如果后面有多个参数,且只给具体的某一个指定默认值,就要具体的指定参数的名字:

 def print_info(name, title="", gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s" % (name, gender_text)) print_info("小明")
print_info("小美", False) # 这个是错误的
print_info("小美", gender=False) # 这里必须指定为gender

输出:

这个原理类似降序排序:

 gl_list = [6, 3, 9]
gl_list.sort(reverse=True)
print(gl_list)

多值参数

 def demo(num, *args, **kwargs):  # 多值参数 *接收元组 **接收字典
print(num)
print(args)
print(kwargs)

输出:

 1
(2, 3, 4, 5)
{'name': '小明', 'age': 18}

使用多值参数的好处,例如下面的例子计算求和,如果不使用* args 也就是不使用多值的元组的时候,我们传递参数的时候就需要传递一个元组,但是这样的话就直接传递一串数字就好了。

 def sum_number(*args):
res = 0
for n in args:
res += n
return res print(sum_number(1, 2, 3, 4, 5))
# print(sum_number((1, 2, 3, 4, 5))) # 如果不加上*的话就要加上这个表示元组的括号

多值参数元组和字典的拆包

首先看下面代码的输出,这个代码是出乎意料的:

 def demo(*args, **kwargs):
print(args)
print(kwargs) gl_tuple = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18} demo(gl_tuple, gl_dict)

输出:

 ((1, 2, 3), {'name': '小明', 'age': 18})
{}

加上拆包:

 def demo(*args, **kwargs):
print(args)
print(kwargs) gl_tuple = (1, 2, 3)
gl_dict = {"name": "小明", "age": 18} demo(*gl_tuple, **gl_dict) # 注意这里加上了拆包 类似与之前的传递参数

输出:

 (1, 2, 3)
{'name': '小明', 'age': 18

Python基础入门总结的更多相关文章

  1. Python基础入门教程

    Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...

  2. [新手必备]Python 基础入门必学知识点笔记

    Python 作为近几年越来越流行的语言,吸引了大量的学员开始学习,为了方便新手小白在学习过程中,更加快捷方便的查漏补缺.根据网上各种乱七八糟的资料以及实验楼的 Python 基础内容整理了一份极度适 ...

  3. Python基础入门教程,Python学习路线图

    给大家整理的这套python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.此套教程,不但有视频教程,还有源码分享,让大 ...

  4. Python怎么样入门?Python基础入门教程

    给大家整理的这套python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.此套教程,不但有视频教程,还有源码分享,让大 ...

  5. PJzhang:python基础入门的7个疗程-one

    猫宁!!! 参考链接:易灵微课-21天轻松掌握零基础python入门必修课-售价29元人民币 https://www.liaoxuefeng.com/wiki/1016959663602400 安全从 ...

  6. Python基础入门一文通 | Python2 与Python3及VSCode下载和安装、PyCharm激活与安装、Python在线IDE、Python视频教程

    目录 1. 关键词 2. 推荐阅读 2.1. 视频教程 3. 本文按 4. 安装 4.1. 视频教程 4.2. 资源下载 4.3. 安装教程 1. 关键词 Python2 与Python3及VSCod ...

  7. python 列表推导式 - python基础入门(16)

    截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...

  8. Python基础入门:注释、变量、运算符与数据类型

    一.为什么要学习python? python的特点 python作为一门脚本语言,在越来越多的行业和领域发挥着重大作用,比如机器学习.网站开发.数据分析.爬虫.自动化测试. 同时,python具备以下 ...

  9. Python基础入门-os模块

    今天我们来介绍一下os模块中常用的一些方法,当然python中的os模块中提供的使用方法有很多,但是这里面小编会列举出来一些和实际工作中应用的相关的方法,而且会有一些实际的例子方便大家对os模块理解. ...

随机推荐

  1. sql server编写archive通用模板脚本实现自动分批删除数据

    博主做过比较多项目的archive脚本编写,对于这种删除数据的脚本开发,肯定是一开始的话用最简单的一个delete语句,然后由于部分表数据量比较大啊,索引比较多啊,会发现删除数据很慢而且影响系统的正常 ...

  2. MySQL-Access denied for user 'username'@'localhost' (using password: YES) 解决

    使用navicat新建MySQL用户保存时提示 Access denied for user 'username'@'localhost' (using password: YES): 解决方法: 请 ...

  3. IDEA 学习笔记之 Java项目开发深入学习(1)

    Java项目开发深入学习(1): 定义编译输出路径: 继承以上工程配置 重新定义新的项目编译路径 添加source目录:点击添加,再点击移除: 编译项目: 常用快捷键总结: Ctrl+Space 代码 ...

  4. [docker swarm] 从单容器走向负载均衡部署

    背景 之前写过<<docker-compose真香>> 和<docker-compose.docker stack前世今生>两篇博客, 回顾一下思路: ① dock ...

  5. Tomcat7.0.40注册到服务启动报错error Code 1 +connector attribute sslcertificateFile must be defined when using ssl with apr

    Tomcat7.0.40 注册到服务启动遇到以下几个问题: 1.启动报错errorCode1 查看日志如下图: 解决办法: 这个是因为我的jdk版本问题,因为电脑是64位,安装的jdk是32位的所以会 ...

  6. UVA - 12099 The Bookcase

    No wonder the old bookcase caved under the massive piles of books Tom had stacked on it. He had bett ...

  7. net core WebApi——使用NPOI导入导出操作

    目录 前言 NPOI 测试 小结 @ 前言 时间过得好快,在之前升级到3.0之后,就感觉好久没再动过啥东西了,之前有问到Swagger的中文汉化,虽说我觉得这种操作的意义不是太大,也是多少鼓捣了下,其 ...

  8. 『嗨威说』算法设计与分析 - PTA 数字三角形 / 最大子段和 / 编辑距离问题(第三章上机实践报告)

    本文索引目录: 一.PTA实验报告题1 : 数字三角形 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 最大子段和 2.1 实践题目 ...

  9. redis安装及启动

    Redis 的安装及启动停止 下载 https://redis.io/download 软件copy至虚拟机中,常用的路径为/root/software 开始安装 安装gcc 目的是为了编译软件 yu ...

  10. 使用AddLayer方法加载shp文件中使用的Map、Dataset等对象详解

    内容源自:ArcGIS Engine+C#入门经典 方法二:使用axMapControl1对象的AddLayer方法加载ShapeFile文件 添加ShapeFile文件需要用到Map.Dataset ...