因为需求, 需要用到py, 所以来学学py, 因为有java基础 一小时入门py语法是不成问题的, 但是仅仅入门基础语法而已, 不涉及算法,不涉及大数据,机器学习,人工智能, 但是py这么火爆,就在于这几个分支遍地开花,后续的路还好长啊

py的语法是真的简单, 跟java比,真的简单太多了, 而且他的代码很有条理, 因为他是严格控制缩进的,在一个缩进块中,就好比一个隐形的大括号一样,限制着变量的声明周期


命名:文件/标识符/关键字

  • 标识符: 程序员定义的变量名,函数名

    • 可以由字母数字下划线组成
    • 不能用数字开头
    • 不能和已经存在的关键字重名
  • 关键字: Python内置的标识符
  • 文件名: 不推荐文件名以数字开头,否则不能通过import关键字导入其他文件使用

注释

  • 单行注释使用 #
  • 多行注释使用 ''' XXX '''

算数运算符

+ - * / == != > < >= <= %

加减乘除的使用方法和其他语言完全相同

//

取整数 求商

  1. 9//2=4

**

幂运算

  1. 2**3=8

列表常见运算

  1. print([1,2]+[3,4])#[1, 2, 3, 4]
  1. print([1,2]*2)#[1, 2, 1, 2]
  1. print(3 in [1,2,3])#True
  2. print(3 not in [1,2,3])#False

对全局列表使用+=操作,相当于extend函数**

  1. def test(list):
  2. list+=list
  3. print(list)#[1, 3, 4, 1, 3, 4]
  4. gl_list=[1,3,4]
  5. test(gl_list)
  6. print(gl_list)#[1, 3, 4, 1, 3, 4]

全局变量使用 = 赋值

不可变 全局变量在函数内部 使用 = ,这种赋值操作, 原全局变量不会被影响

  1. gl_num=1
  2. def test(num):
  3. print(num)#1
  4. num=2
  5. print(num)#2
  6. num+=3
  7. print(num)#5
  8. test(gl_num)
  9. print(gl_num)#1

在函数中, 如果全局变量是可变类型的, 如果在函数中往这个全局变量中添加内容了, 全局变量的值会受到影响

  1. gl_num=[1,3,4]
  2. def test(num):
  3. print(num)#[1, 3, 4]
  4. num+=[1]
  5. print(num)#[1, 3, 4, 1]
  6. test(gl_num)
  7. print(gl_num)#[1, 3, 4, 1]

赋值运算符

  1. =
  2. +=
  3. -=
  4. *=
  5. /= 除法赋值运算符
  6. //= 取整赋值运算符
  7. %= 取模赋值运算符
  8. **= 幂赋值运算符

转义运算符

  1. \t 在控制台上输出一个制表符
  2. \n 在控制台上输出一个换行符
  3. \\ 反斜杠符
  4. \' 输出单引号
  5. \r 回车

变量

变量的命名:

  • 区分大小写 Abc != abc
  • 为了保证代码的质量, = 两边预留两个空格
  • 所有单词全是小写字节
  • 单词之间使用下划线连接 first_name

在py中,变量的类型是有不需要程序员指定,因为它是在运行时,由解释器自己推断出来的

例:

  1. name="小明" # str 字符串类型
  2. age=18 # int 整形
  3. sex= True # bool 布尔类型 True False 首字母都是大写
  4. height=1.78 # float 单精度小数类型
  5. weiht=75.0 # float
  6. weiht2=75 # int
  • 数字型

    • int: 整形
    • float: 浮点型
    • bool:布尔型
      • True: 所有非0的数字
      • False:0
    • 复数类型: complex
      • 主要用于科学计算
  • 非数字型:
    • str:字符串
    • 列表
    • 元组
    • 字典
  1. py2.0
  2. type(2 ** 32) --> int
  3. type(2 ** 64) --> long
  4. # 在py3.0中 全部都是 int, 在py中的计算能力,完爆其他语言
  5. ```py
  6. print(type(2 ** 32))
  7. print(type(2 ** 64))
  8. print(type(2 ** 128))
  9. print(type(2 ** 256))
  10. print(type(2 ** 512))
  11. print(type(2 ** 1024))

type函数可以直接查看变量的类型

  1. print(type(name)) # 结果 <class 'str'>
  • 相同类型之间的计算规则

    • 数值型变量之间的计算
    • bool型, True被转换成1 False被转换成0
    • 字符串之间使用 + 拼接成连续串
  • 不同类型数据之间的计算规则

    • 字符串 * 整数 实现重复拼接串
  1. print("$"*10)#$$$$$$$$$$

  • 数字型变量和字符串之间不能进行其他类型操作
  1. d=10
  2. f="10.5"
  3. g=True
  4. print(d+f+g)#TypeError: unsupported operand type(s) for +: 'int' and 'str'
  • 变量的输入输出
  1. passwd = input("请输入密码")
  2. print(passwd)
  3. print(type(passwd))
  • 类型转换
  1. 类型转换函数
  2. int(X)#将输入转换成整数
  3. float(X)#将输入转换成浮点型
  • 变量的格式化输出
  1. %s: 字符串
  2. %d: 有符号十进制整数 %06d 表示输出的整形显示的位数, 不足的地方使用0补全
  3. %f: 浮点型 %.02f 表示显示小数点后两位
  4. %%: 输出%
  5. q=999
  6. print("格式化的字符串是 %06d "%q)#000999
  7. w=123.123456
  8. e=123.123456
  9. r=123.123456
  10. print("格式化的字符串%.2f"%w)#123.12
  11. print("%.1f %.2f %.3f"% (w,e,r))#123.1 123.12 123.123
  12. t=0.25
  13. print("%.2f%%" % t)#0.25%
  • 全局变量

全局变量推荐定义在全部代码的最上方

全局变量的推荐命名规则

  1. g_XXX gl_XXX

如何在 函数内部修改全局变量?

先使用 global 进行修饰,再修改

高级变量

如: 列表 元组 字典 字符串 公共方法

在python中全部的非数字型变量都支持以下特点

  1. 都是一个序列, 也可以理解成容器
  2. 取值 []
  3. 遍历 for in
  4. 计算长度,最大/小 值 比较 删除
  5. 连接+ 重复*
  6. 切片

列表

列表,在java叫数组

虽然列表可以存储不同类型的数据,但是绝大多数情况下, 用它存储相同类型的数据

使用 [] 定义, 数据之间使用 , 分隔

列表的索引从 0 开始

py中提供的常用操作

  1. python 中对列表提供的操作
  2. 1. 增加 列表insert(索引,数据) 在指定位置插入数据
  3. 列表append(数据) 在末尾追加数据
  4. 列表extend(列表2) 将列表2的数据追加到列表
  5. 2. 修改 列表[索引]=新值 修改指定索引的数据
  6. 3. 删除 del列表[索引] 删除指定索引的数据
  7. 列表.remove[数据] 删除第一个出现的指定的数据
  8. 列表.pop 删除末尾的数据
  9. 列表.pop(索引) 删除指定索引的数据
  10. 列表.clear 清空列表
  11. 4. 统计 len(列表) 列表长度
  12. 列表.count(数据) 数据在列表中出现的次数
  13. 5. 排序 列表.sort() 升序
  14. 列表.sort(reserve=true) 降序排序
  15. 列表.reserve() 逆序,反转
  16. 6. 取索引 列表.index(数据) 返回数据在列表中的索引
  • 把变量从内存中删除掉
  1. del name_list[0]
  2. print(name_list[0])
  • 第一个参数位置的self 直接忽略就行
  • 迭代
  1. for name in name_list:
  2. print(name)

元组

元组 Tuple 和列表类似,但是元组的元素 不能修改

通常使用 元组 存储不同类型的数据

元组表示多个元素组成的序列

下标从0开始

用户存储一串信息, 数据之间使用 逗号 分隔

  • 定义元组
  1. info_tuple = ("zhangsan",18,1.75)
  2. print(type(info_tuple)) # <class 'tuple'>
  • 取值
  1. print(info_tuple[0])
  2. print(info_tuple[1])
  3. print(info_tuple[2])
  4. # print(info_tuple[3])#tuple index out of range
  • 取索引
  1. print(info_tuple.index("zhangsan")) # 0
  • 统计计数
  1. print(info_tuple.count("zhangsan")) # 1
  • 定义空元组,一般是不定义空元组的,但是没意义,因为不能再修改
  1. empty_tuple = ()
  2. print(type(empty_tuple))#<class 'tuple'>
  • 定义一个元素的元组
  1. single_touble1 = (5) # 解释器会忽略两个小括号
  2. print(type(single_touble1))# <class 'int'> 被解释器解释成了int类型
  3. single_touble2 = (5,) # 多加上一个逗号
  4. print(type(single_touble2))#<class 'tuple'>
  • 元组的应用场景

    • 作为入参: 可以使得函数一次性接受多个参数
    • 让列表不可变,保护数据的安全
    • 作为返回值: 可以使函数一次性返回多个值
    • 格式化字符串, 在print函数中,格式化字符串时, 格式化字符串后面的() 本质上就是一个元组

例:

  1. print("年龄: %d 姓名:%s"%(123,"小明"))
  2. info_tuple = ("zhangsan",18,1.75)
  3. print(type(info_tuple)) # <class 'tuple'>
  4. info_str="姓名:%s 年龄: %d 身高%.2f "% info_tuple
  5. print(info_str)
  • 列表转元组
  1. my_list = [1,3,4,5]
  2. my_list = tuple(my_list)
  3. print(type(my_list)) # my_list
  • 函数返回元组
  1. def mea():
  2. a=1
  3. b=2
  4. return (a,b)
  5. # 接受
  6. result = mea()
  7. # 使用
  8. print(result[0])
  9. print(result[1])
  10. # 也可以这样接收, 注意, 变量的格式和元组的数保持一致
  11. gl_a, gl_b = mea()

字典

字典是 无序对象 的集合 类似java中的 map,或者说是java中的一个对象

说它是无序,使用print输出时,每次的顺序不唯一

因为我们只关心通过key 取出 保存的数据,而不关心存储的顺序

字典使用{}定义

字典使用键值对存储数据, 键值对使用 逗号分隔

key 是索引,并且是 不可变类型的变量才能当key (列表,字典是可变类型,不能当成key)

value 是数据

键和值之间使用 : 冒号分隔

键是唯一的

值任意数据类型

* 定义字典

  1. person={"name":"张三","age":23}
  • 取值
  1. # 取值
  2. print(person["name"])# 入参位置的namekey
  3. # print(xiaoming["name123"])# KeyError: 'name123' key不存在,程序会报错
  • 添加修改
  1. # 添加/修改, 如果key存在了, 就是修改, key不存在就是添加
  2. person["height"]=1.78
  3. print(person)
  • 删除
  1. person.pop("age")
  2. print(person)
  • 统计键值对的数量
  1. print(len(person))
  • 合并字典
  1. new_dir={"class":"大一"}
  2. person.update(new_dir) # 如果被合并的字典中包含原有的键值对, 会覆盖旧值
  3. print(person)
  • 清空字典xiaoming
  1. xiaoming.clear()
  2. print(xiaoming)
  • 遍历
  1. for k in person:
  2. print(" value = %s "%person[k])
  • 字典和列表搭配使用
  1. 将多个字典存入一个列表中,然后遍历列表对实现对字典批量处理的动作
  2. list = [
  3. {},
  4. {},
  5. {}
  6. ]

if分支判断语句

  1. if 要顶格写
  2. if 条件1:
  3. XXX
  4. elif ()or()or():
  5. XXX
  6. else:
  7. XXX
  8. 严格控制缩进, tab 空格不能混用,容易乱

逻辑运算符

  1. and
  2. or
  3. not
  4. 条件1 and 条件2
  5. 条件1 or 条件2
  6. 对条件取反
  7. not 条件1
  8. not 条件2

循环

  • for循环
  1. for 变量 in 集合:
  2. XXX
  3. else:
  4. XXX
  • while循环
  1. i=0
  2. while i<5:
  3. print("i= %d"%i)
  4. #i=i+1
  5. i+=1

函数

格式如下

  1. def 函数名():
  2. XXX
  3. XXX
  4. def 函数名():
  5. XXX
  6. XXX
  7. return XXX

内置函数

  • 随机数
  1. import random
  2. n = random.randint(1,5)# 1 <= n <= 5
  3. m = random.randint(5,5)# n = 5
  4. # s = random.randint(10,5)# 第一个数大于第二个数则保存
  5. print("age== %d "%n)

缺省参数

  • 缺省参数, 简化人们的编码
  1. gl_list=[5,126,7]
  2. gl_list.sort()
  3. print(gl_list) # 默认正序
  4. gl_list.sort(reverse=True) # 缺省参数位置,可以设置逆序
  5. print(gl_list)
  • 指定缺省参数的默认值
  1. def print_info(name,gender=True):
  2. default_gender="男生"
  3. if not gender:
  4. default_gender = "女生"
  5. print("%s 是 %s"%(name,default_gender))
  6. print_info("小明")
  7. print_info("小明",False)

注意事项:缺省参数必须保证它出现在 !!! 参数列表的末尾 !!!

  • 如何调用含有多个参数, 如果有多个参数的话, 中间位置的参数最好也设置上默认值
  1. def print_info(name,age="",gender=True):
  2. default_gender="男生"
  3. if not gender:
  4. default_gender = "女生"
  5. print("%s 是 %s"%(name,default_gender))
  6. print_info("小明")
  7. print_info("小明",gender=False)
  • 多值参数

在参数名前添加一个 * 可以接收元组

在参数名前添加两个 * 可以接收字典

习惯用下面的方式命名:

  • *args :存放元组
  • **kw :存放字典数据

  1. def demo(num,*nums,**person):
  2. print(num)
  3. print(nums)
  4. print(person)
  5. demo(1)
  6. '''
  7. 1
  8. ()
  9. {}
  10. '''
  11. demo(1,23,4,5,6)
  12. '''
  13. 1
  14. (23, 4, 5, 6)
  15. {}
  16. '''
  17. demo(1,23,4,5,6,name="张三",age=18)
  18. '''
  19. 1
  20. (23, 4, 5, 6)
  21. {'name': '张三', 'age': 18}
  22. '''
  23. # 对比去除* 的写法, 其实用户在使用时变麻烦了,多增加了一个小括号
  24. def print_info1(name):
  25. print(name)
  26. print_info1((1,2,3,4))#(1, 2, 3, 4)

元组和字段的拆包

  1. def demo(*args,**kwargs):
  2. print(args)
  3. print(kwargs)
  4. gl_nums=(1,2,3)
  5. gl_dir={"name":"李四","age":12}
  6. demo(gl_nums,gl_dir)
  7. '''
  8. 下面的运行结果其实是差强人意的, 需要进行拆包
  9. ((1, 2, 3), {'name': '李四', 'age': 12})
  10. {}
  11. '''
  12. # 不拆包,直接调用
  13. demo(1,2,3,name="李四",age=123)
  14. '''
  15. (1, 2, 3)
  16. {'name': '李四', 'age': 123}
  17. '''
  18. # 拆包
  19. demo(*gl_nums,**gl_dir)
  20. '''
  21. (1, 2, 3)
  22. {'name': '李四', 'age': 12}
  23. '''

一小时入门 Python的更多相关文章

  1. Python入门教程 超详细1小时学会Python(转)

    假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是bash而Windows ...

  2. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...

  3. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的 ...

  4. 1小时学Python脚本

    如果我们有这么一项任务:简单測试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200.        思路:用shell编程.(Linux一般是bash而 ...

  5. 实例教程:1小时学会Python(转)

    1 序言 面向读者 本文适合有经验的程序员尽快进入Python2.x世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的Python程序. Pyt ...

  6. 《Qt Quick 4小时入门》学习笔记4

    http://edu.csdn.net/course/detail/1042/14806?auto_start=1 Qt Quick 4小时入门 第七章:处理鼠标与键盘事件 1.处理鼠标事件 鼠标信号 ...

  7. 《Qt Quick 4小时入门》学习笔记3

    http://edu.csdn.net/course/detail/1042/14807?auto_start=1 Qt Quick 4小时入门 第八章:Qt Quick中的锚(anchors)布局 ...

  8. 《Qt Quick 4小时入门》学习笔记2

    http://edu.csdn.net/course/detail/1042/14805?auto_start=1   Qt Quick 4小时入门 第五章:Qt Quick基本界面元素介绍   1. ...

  9. 《Qt Quick 4小时入门》学习笔记

    http://edu.csdn.net/course/detail/1042/14804?auto_start=1   Qt Quick 4小时入门 第五章:Qt Quick里的信号与槽   QML中 ...

随机推荐

  1. 浅谈NodeJS多进程服务架构基本原理

    阅读目录 一:nodejs进程进化及多进程架构原理 二:node中child_process模块实现多进程 三:父子进程间如何通信? 四:理解cluster集群 回到顶部 一:nodejs进程进化及多 ...

  2. JavaScript数据结构——队列的实现与应用

    队列与栈不同,它遵从先进先出(FIFO——First In First Out)原则,新添加的元素排在队列的尾部,元素只能从队列头部移除. 我们在前一篇文章中描述了如何用JavaScript来实现栈这 ...

  3. 带图标和多行显示的ListBox

    源码https://www.codeproject.com/Articles/15464/Extending-the-ListBox-to-show-more-complex-items 定义控件 u ...

  4. Netbeans courier new 乱码问题

    Netbeans 默认的字体 monospaced,显示英文的单引号及字体非常的不好看,在网上查了下资料可以变得很好看. 1.仍然保持默认字体 monospaced 2.在Netbeans 的安装目  ...

  5. 如何在logback.xml中自定义动态属性

    当使用logback来记录Web应用的日志时,我们通过在logback.xml中配置appender来指定日志输出格式及输出文件路径,这在一台主机或一个文件系统上部署单个实例没有问题,但是如果部署多个 ...

  6. net core Webapi基础工程搭建(一)——开发工具及环境

    目录 开发工具 版本 后端框架 开发工具 Visual Studio 2019,既然要折腾那就体验最新版的开发工具有什么特殊的地方,之前个人开发使用的是2017. 下载地址:https://visua ...

  7. coo ceo cfo cto cio 区别

    常见的CEO(Chief executive officer)首席执行官类似总经理.总裁,是企业的法人代表. COO(Chief operating officer)首席运营官 类似常务总经理CFO( ...

  8. restapi(6)- do it the functional way, 重温函数式编程

    再次看了看上篇博客的源代码,发现连自己都看不懂了.想是为了赶时间交货不知不觉又回到OOP行令模式了,看看下面这段代码: (post & parameters('pid,'desc.?,'wid ...

  9. Redis缓存,持久化,高可用

    一,Redis作缓存服务器 ​ 本篇博客是接着上一篇博客未分享完的技术点. ​ redis作为缓存服务器是众多企业中的选择之一,虽然该技术很成熟但也是存在一定的问题.就是缓存带来的缓存穿透,缓存击穿, ...

  10. SpringMVC源码分析2:SpringMVC设计理念与DispatcherServlet

    转自:https://my.oschina.net/lichhao/blog SpringMVC简介 SpringMVC作为Struts2之后异军突起的一个表现层框架,正越来越流行,相信javaee的 ...