大纲

变量和类型
常见字符串处理
条件判断
循环控制
函数

变量和类型

基本变量类型

对于python所有对象都是继承自object的类      容器:

整数  print(type(1234))   <class 'int'>    列表   <class 'list'>  print(type([1, 2, 3, 'a', 'b']))
浮点数 print(type(123.))   <class 'float'>   元组   <class 'tuple'>  print(type((1, 'abc')))
字符串 print(type(123.))   <class 'str'>    集合   <class 'set'>   print(type(set(['a', 'b', 3])))
布尔值                       字典   <class 'dict'>  print(type({'a': 1, 'b': 2}))
空值
函数  <class 'function'>

  1. def func(a, b, c):
  2. print(a, b, c)
  3.  
  4. print(type(func))
    a = func
    print(type(a))

模块  <class 'module'>

  1. import string
  2. print(type(string))

类    <class 'type'>    <class '__main__.MyClass'>

  1. class MyClass(object):
  2. pass
  3. print(type(MyClass))
  4. my_class = MyClass()
  5. print(type(my_class))

对于自己定义的类,它是属于type类型,(type也是一个类型,用来描述类型的类型(元编程)

  所有的类的背后也是有一个类来描述这些类的)

实例化了一个类之后,这个实例就是所对应的类型

在python里所有的对象都是类,甚至类本身也是一个类

类型*
自定义类型

变量定义

变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。

x = 100

在堆上分配了一个int,4个字节,在python64位可能就8个字节,这8个字节里写了一个100,

x实际上就是指向存放100的这个内存地址。

所有的变量实际上是一个内存地址,指向堆上的一个内存地址

基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。(弱类型

变量赋值

每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。(重要!!!
等号(=)用来给变量赋值,等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

  1. try:
  2. print(x)
  3. except NameError:
  4. print('NameError: "x" is not defined')

常见字符串处理

  1. import string
  2. s = 'abc'
  3. s[0] = 'x'
  4.  
  5. TypeError: 'str' object does not support item assignment

字符串可以当作一个数组访问,但是不能被修改,类型错误,不支持元素的赋值操作

去除空格及特殊符号:strip, lstrip, rstrip

  1. import string
  2. #去除空格
  3. s = ' abcd efg '
  4. print(s.strip())
  1. print(s.ltrip())
  1. print(s.rtrip())
    print(s)#本身并没有被修改

在调用strip之后会返回一个新的字符串,因为字符串本身不可以被修改,

所以它调用了这种操作,修改字符串操作之后,一定是返回一个新的字符串

复制字符串:str1 = str2
连接字符串
str2 += str1
new_str = str2 + str1
查找字符串:pos = str1.index(str2)
比较字符串:cmp(str1, str2)

  1. import string
  2.  
  3. #位置比较
  4. s_1 = 'abcdefg'
  5. s_2 = 'abdeffxx'
  6. print(s_1.index('bcd'))
  7. try:
  8. print(s_2.index('bcd'))
  9. except ValueError:
  10. pass

在python3里面cmp函数被移除了,可以直接用> < == 比较字符串

  1. print(s_1 == s_2)  False
  2. print(s_1 < s_2)   True
  3. print(s_1 > s_2)   False

字符串长度:len(str)

  1. s = ''
  2. if s is None:
  3. print('None')

空字符串和None是两回事,None是一个空指针,空字符串的话还是给它分配了一个对象,

在内存中还是有一个对象的,但是空字符串和False是等价的

  1. s = ''
  2. if s is None:
  3. print('None')
  4. if not s:
  5. print('Empty')

大小写转换
u_str = str.upper()
l_str = str.lower()
首字母大写:str.capitalize(); string.capword(str)

  1. import string
  2.  
  3. #大小写
  4. s = "abc def"
  5. print(s.upper())
  6. print(s.upper().lower())
  7. print(s.capitalize())

分割与合并字符串:split, splitlines, join

  1. #分割和连接
  2. s='abc,def,ghi'
  3. splitted = s.split(',')
  4. print(type(splitted))
  5. print(splitted)
  1. s = """abc
  2. def
  3. ghi
  4. efg"""
  5. s_1 = s.split('\n')
  6. s_2 = s.splitlines()#按行分割
  7. print(s_1)
  8. print(s_2)

print(''.join(s_1))
print('-'.join(s_1))
print('\n'.join(s_1))

类型转换:int, float转换

  1. #数字转换成字符串
  2. print(str(5))
  3. print(str(5.))
  4. print(str(5.1234))
  5. print(str(-5.123))
  6. #字符串到数字
  7. print(int(''))
  8. print(float('1234.45'))
  9. print(int('123.45'))
  1. print(int('123.45'))要传递正确的格式,如果格式错误,系统不会自动认为你是一个浮点数要转换成整数
  1. #几进制的转换
  2. print(int('', 2))#2进制转换成10进制
  3. print(int('ffff', 16))#16进制转换成10进制
  4. print(int('', 8))
  1. #由于字符串本身不可以被修改,
  2. #把字符串赋值到数组里面去
  3. s = "abcdefg"
  4. l = list(s)
  5. print(l)

作业:

字符串按单词反转,必须保留所有空格('I love China!  ')

格式化字符串

字符串测试
str.startswith(prefix)
str.endswith(suffix)
str.isalnum() # 是否全是字母和数字,并至少有一个字符。
str.isalpha() # 是否全是字母,并至少有一个字符。
str.isdigit() # 是否全是数字,并至少有一个字符。
str.isspace() # 是否全是空白字符,并至少有一个字符。
str.islower() # 字母是否全是小写
str.isupper() # 字母是否全是大写
str.istitle() # 首字母是否大写

  1. #常用判断
  2. s = "abcdefg"
  3. print(s.startswith('abc'))
  4. print(s.endswith('efg'))
  5. print('1234abcd'.isalnum())
  6. print('\t34abcd'.isalnum())  #False
  7. print(''.isdigit())
  8. print('abcd'.isalpha())
  9. print(' '.isspace())
  10. print('abcd12345'.islower())
  11. print('ABCD1234'.isupper())
  12. print('Hello world'.istitle())  #False
    #istitle()如果字符串中所有的单词拼写首字母是否为大写,且其他字母为小写则返回 True,否则返回 False.

条件判断

python 中没有switch函数的只能有if elif else来完成

真值判断
if x == True:
if x:
if not x:

  1. #if判断
  2. a = 100
  3. b = 200
  4. c = 300
  5. if c == a:
  6. print(a)
  7. elif c == b:
  8. print(c)
  9. else:
  10. print(b)

空值判断
if x is None:
if not x:

  1. #None的判断
  2. x = None
  3. if x is None:
  4. print('None')
  5. else:
  6. print('not None')

比较
if a == b:
if a > b:
...

循环控制

for循环
for i in range(begin, end, steps): <=> for (i = begin; i < end; i += steps)
while循环
while 条件判断:
循环嵌套
循环控制
break
continue
pass

  1. # for 循环
  2. #for (i = start; i < end; i += step)
  3.  
  4. #for i in 容器(可迭代的)
  5.  
  6. for i in range(0,30, 5):
  7. print (i)
  8.  
  9. # while 循环
  10.  
  11. s = 0
  12. i = 1
  13. while i <= 100:
  14. s += i
  15. i += 1
  16.  
  17. print (s)
  18.  
  19. for i in range(0,100):
  20. if i < 10:
  21. pass
  22. elif i < 30:
  23. continue
  24. elif i < 35:
  25. print(i)
  26. else:
  27. break

函数

  1. def func_name(arg_1, arg_2):
  2. print (arg_1, arg_2)
  3. return arg_1, arg_2#返回多个值,实际返回的是一个元组,只读的list
  4.  
  5. r = func_name(1, 2)
  6. print(type(r))
  7. print(r)
  8. print(r[0], r[1])

函数定义格式

  默认参数

  1. def func(x, y = 500):
  2. return x + y
  3.  
  4. print(func(100, 600))  
  5. print(func(100))

  

  1. def func(x, y = 500):
  2. print('x=', x)
  3. print('y=', y)
  4. return x + y
  5.  
  6. print(func(100))
  7. print(func(y = 300, x = 200))
  8. print(func(x = 400))

在函数调用的时候,把参数的名字给写出来,并给它指定一个值,

不用严格按照参数次序,代码的可读性提高

  1. def func(p):
  2. print('x=', p['x'])
  3. print('y=', p['y'])
  4.  
  5. print(func({'x':100, 'y':200}))#用字典实现类似的功能

  可变参数:*args,自动组装成tuple

  1. #可变参数
  2.  
  3. #main(int argc, char ** argv)
  4. #printf
  5.  
  6. def func(name, *numbers):
  7. print(type(numbers))
  8.  
  9. func('Tom', 1, 2, 3, 4, 5)

从name之后,后面所有的参数,它会打包成一个元组,一个只读的数组

#tuple - 元组  <=>   只读数组,后面的所有参数都会作为一个数组

  1. *numbers前面加一个*号,告诉python处理后面所有参数时,放到一个数组里面去
  1. def func(name, *numbers):
  2. print(numbers)
  3. print(numbers[0])  #1
  4. print(numbers[3])  #4
  5. return 'Done'
  6. func('Tom', 1, 2, 3, 4, 5, 'abc', 'def')

容器是不用考虑类型一致性,计算的时候才会有要求

可变参数是没有名字的,只能有数组索引,python提供另一种方法,

传入字典  使用 **

  1. def my_print(*args):
  2. print(args)
  3.  
  4. my_print(1, 2, 3, 4, 'a', 'b', 'c')
  5.  
  6. def func(name, **kvs): # ** means key/values
  7. print(name)
  8. print(type(kvs))
  9. print(kvs)
  10. func('Tom', china = 'Beijing', uk = 'London')
  1. <class 'dict'>
  2. {'china': 'Beijing', 'uk': 'London'}


  关键字参数:*args,自动组装成dict
  命名关键字参数

  1. def func(a, b, c, *, china, uk):
  2. print(china, uk)
  3. func(1, 2, 3, china = 'Beijing', uk = 'London')

* 号后面的变量,意味着在传递参数的时候,一定要把它的名字带上

  1. def func(a, b, c = 0, *args, ** kvs):
  2. print(a, b, c)
  3. print(args)
  4. print(kvs)
  5.  
  6. func(1, 2)
  7. func(1, 2, 3)
  8. func(1, 2, 3, 'a','b', 'c')
  9. func(1, 2, 3, 'a', 'b', china = 'BJ', uk = 'LD')
  10.  
  11. #为了代码可读性高一些,*代表传递给args
  12. func(1, 2, 3, *('a', 'b'), **{'china' : 'BeiJing', 'uk' : 'London'})
  1. 1 2 0
  2. ()
  3. {}
  4. 1 2 3
  5. ()
  6. {}
  7. 1 2 3
  8. ('a', 'b', 'c')
  9. {}
  10. 1 2 3
  11. ('a', 'b')
  12. {'china': 'BJ', 'uk': 'LD'}
  13. 1 2 3
  14. ('a', 'b')
  15. {'china': 'BeiJing', 'uk': 'London'}
  1. def my_print(*args):
  2. print(*args)
  3.  
  4. my_print('x=', 100, ';y=', 200)
  1. x= 100 ;y= 200

作业:

打印100000以内的所有素数

自己实现一个函数支持可变参数



函数调用
  函数名(参数名)
  模块名.函数名(参数名)
  带参数名调用
什么是递归?

  1. def my_sum(i):
  2. if i < 0:
  3. raise ValueError
  4. elif i <= 1:
  5. return i
  6. else:
  7. return i + my_sum(i-1)
  8.  
  9. print(my_sum(1))
  10. print(my_sum(2))
  11. print(my_sum(3))
  12. print(my_sum(4))
  13. print(my_sum(100))
  1. 1
  2. 3
  3. 6
  4. 10
  5. 5050

斐波那契数

  1. #f(n) = f(n-1) + f(n-2)
  2.  
  3. def fib(n):
  4. if n < 1:
  5. raise ValueError
  6. elif n <= 2:
  7. return 1
  8. else:
  9. return fib(n-1) + fib(n-2)
  10.  
  11. print(fib(1))
  12. print(fib(2))
  13. print(fib(3))
  14. print(fib(4))
  15. print(fib(5))
  16. print(fib(6))
  1. 1
  2. 1
  3. 2
  4. 3
  5. 5
  6. 8
  1. def hanoi(n, source, target, helper):
  2. if n == 1:
  3. print(source + '->' + target)
  4. else:
  5. hanoi(n-1, source, helper, target)
  6. print(source + '->' + target)
  7. hanoi(n-1, helper, target, source)
  8.  
  9. hanoi(4, 'A', 'B', 'C')
  1. A->C
  2. A->B
  3. C->B
  4. A->C
  5. B->A
  6. B->C
  7. A->C
  8. A->B
  9. C->B
  10. C->A
  11. B->A
  12. C->B
  13. A->C
  14. A->B
  15. C->B
  1. # 在python里函数是可以作为参数的
  2.  
  3. p = print
  4. p(1,2,3)
  5.  
  6. def sum(x, y, pf = None):
  7. s = x + y
  8. if pf:
  9. pf(s)
  10. return s
  11.  
  12. sum(100, 200)
  13. sum(100, 200, print)
  14.  
  15. def cmp(x, y, cp = None):
  16. if not cp:
  17. if x > y:
  18. return 1
  19. elif x < y:
  20. return -1
  21. else:
  22. return 0
  23. else:
  24. return cp(x, y)
  25.  
  26. def my_cp(x, y):
  27. if x < y:
  28. return 1
  29. elif x == y:
  30. return 0
  31. else:
  32. return -1
  33.  
  34. print(cmp(100,200))
  35. print(cmp(100, 200, my_cp))
  1. 1 2 3
  2. 300
  3. -1
  4. 1

作业:

  字符串按单词反转(必须保留所有空格):'I love China!   ' 转化为 '   China! love I'

  打印100000以内的所有素数

  自己实现一个函数支持可变参数

  自己实现函数解决hanoi塔问题

  实现一个sort函数,通过参数指定比较函数用来实现按不同顺序进行排序


在python里面,因为函数本身也是一个对象,所以它可以像普通变量一样,被作为参数传递来传递去

  1. def do_sum(data, method):
  2. return method(data)
  3.  
  4. print(do_sum([1, 2, 3, 4], sum))

【JulyEdu-Python基础】第 2 课:关键字和循环控制的更多相关文章

  1. python 基础 6.2 raise 关键字使用

    一. raise 关键字    raise 用来触发异常    语法如下:     raise[Exception [,args [,traceback]]]     语句中Exception 是异常 ...

  2. 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用

    1 课程起源 有一次在工作中编写python工具时,遇到一个 问题:从配置文件读取变量A后,无法在内存中把A的值改变成新的内容.为了解决"更新内存中变量"的这个问题,查找了一些帖子 ...

  3. Python基础之只接收关键字参数的函数

    当我们希望函数的某些参数强制使用关键字参数时,可以将强制关键字参数放到某个*后面就能得到这种效果.比如: def recv(maxsize, *, block): """ ...

  4. 『Python基础-3』变量、定义变量、变量类型、关键字Python基础-3』变量、定义变量、变量类型、关键字

    『Python基础-3』变量.定义变量.变量类型.关键字 目录: 1.Python变量.变量的命名 2.变量的类型(Python数据类型) 3.Python关键字 1. Python 变量.变量的命名 ...

  5. Python基础第一课

    Python基础 安装软件并配置环境变量 1.第一句python --初学后缀名可以是任何数 --后期学习需要导入模块时不是py后缀名会报错 2.两种执行方式 Python解释器 py文件路径 Pyt ...

  6. 第一课、python基础学习笔记

    自动化非自动化的区别 自动化测试就是让机器按照人的想法把功能全部跑一遍 自动化测试的过程,让我们写一段程序去测试另一段程序是否正常的过程 Java 编译型语言,   编码-->编译-->解 ...

  7. Python基础 - 关键字

    前言 与C一样,python也有自己的关键字,关键字有特殊的意义,不能作为普通的变量名类名等用途 关键字列表 以python2.7.5为例,有如下关键字: and del from not while ...

  8. Python【第三课】 函数基础

    本篇内容 函数基本语法及特性 嵌套函数 递归函数 匿名函数 高阶函数 内置函数 1.函数的基本语法及特性 1.1 函数概念 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提 ...

  9. Python基础知识总结笔记(四)函数

    Python基础知识总结笔记(四)函数python中的函数函数中的参数变量作用域偏函数PFA递归函数高阶函数BIFs中的高阶函数匿名函数lambda闭包Closure装饰器Decorator函数式编程 ...

  10. Python 基础 一

    Python 基础  一 一.关于Python的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum),这一两年在国内很流行,应用很广泛. 二.Python的基础知识(1) 1 ...

随机推荐

  1. electron-vue 引入OpenLayer 报错 Unexpected token export

    electron-vue 引入OpenLayer 报错 Unexpected token export 解决办法: 在 .electron-vue/webpack.renderer.config.js ...

  2. Linux Tomcat 文件上传异常

    如题: ERROR > The temporary upload location [/tmp/tomcat.7982919351026796141.9097/work/Tomcat/local ...

  3. 4、路由事件 RoutedEvent

    路由事件的类型:具体参考https://www.cnblogs.com/jellochen/p/3475754.html Tunnel隧道方式:路由事件使用隧道策略,以便事件实例通过树向下路由(从根到 ...

  4. PHP基础教程-APACHE

    兄弟连:如何配置APACHE.首先,安装并配置PHP3 1.解开压缩包到你喜欢的目录如:C:PHP3 2.把C:php3php3.ini-inst文件改名成PHP3.INI并拷贝到C:windows ...

  5. jquery change() 函数 语法

    jquery change() 函数 语法 作用:当元素的值发生改变时,会发生 change 事件.该事件仅适用于文本域(text field),以及 textarea 和 select 元素.cha ...

  6. jQuery文档操作之克隆操作

    语法: $(selector).clone(); 解释:克隆匹配的DOM元素 $("button").click(function(event) { //1.clone():克隆匹 ...

  7. 动态DP教程

    目录 前言 开始 更进一步 前言 最后一届NOIPTG的day2T3对于动态DP的普及起到了巨大的作用.然而我到现在还不会 开始 SP1716 GSS3 - Can you answer these ...

  8. AtCoder AGC014E Blue and Red Tree (启发式合并)

    题目链接 https://atcoder.jp/contests/agc014/tasks/agc014_e 题解 完了考场上树剖做法都没想到是不是可以退役了... 首先有一个巨难写的据说是\(O(n ...

  9. postgres的数据库备份和恢复

    备份和恢复 一条命令就可以解决很简单: 这是备份的命令: pg_dump -h 127/0.0.1 -U postgres databasename > databasename.bak 指令解 ...

  10. TCP层shutdown系统调用的实现分析

    概述 shutdown系统调用在tcp层会调用两个函数,对于ESTABLISHED状态需要调用tcp_shutdown关闭连接,对于LISTEN和SYN_SENT状态则需要以非阻塞模式调用tcp_di ...