python基础知识(day3)
一、字符编码与转码
先说python2
- py2里默认编码是ascii
- 文件开头那个编码声明是告诉解释这个代码的程序 以什么编码格式 把这段代码读入到内存,因为到了内存里,这段代码其实是以bytes二进制格式存的,不过即使是2进制流,也可以按不同的编码格式转成2进制流,你懂么?
- 如果在文件头声明了#_*_coding:utf-8_*_,就可以写中文了, 不声明的话,python在处理这段代码时按ascii,显然会出错, 加了这个声明后,里面的代码就全是utf-8格式了
- 在有#_*_coding:utf-8*_的情况下,你在声明变量如果写成name=u"大保健",那这个字符就是unicode格式,不加这个u,那你声明的字符串就是utf-8格式
- utf-8 to gbk怎么转,utf8先decode成unicode,再encode成gbk
再说python3
- py3里默认文件编码就是utf-8,所以可以直接写中文,也不需要文件头声明编码了,干的漂亮
- 你声明的变量默认是unicode编码,不是utf-8, 因为默认即是unicode了(不像在py2里,你想直接声明成unicode还得在变量前加个u), 此时你想转成gbk的话,直接your_str.encode("gbk")即可以
- 但py3里,你在your_str.encode("gbk")时,感觉好像还加了一个动作,就是就是encode的数据变成了bytes里,我擦,这是怎么个情况,因为在py3里,str and bytes做了明确的区分,你可以理解为bytes就是2进制流,你会说,我看到的不是010101这样的2进制呀, 那是因为python为了让你能对数据进行操作而在内存级别又帮你做了一层封装,否则让你直接看到一堆2进制,你能看出哪个字符对应哪段2进制么?什么?自己换算,得了吧,你连超过2位数的数字加减运算都费劲,还还是省省心吧。
- 那你说,在py2里好像也有bytes呀,是的,不过py2里的bytes只是对str做了个别名(python2里的str就是bytes, py3里的str是unicode),没有像py3一样给你显示的多出来一层封装,但其实其内部还是封装了的。 这么讲吧, 无论是2还是三, 从硬盘到内存,数据格式都是 010101二进制到-->b'\xe4\xbd\xa0\xe5\xa5\xbd' bytes类型-->按照指定编码转成你能看懂的文字
在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string
转码方式如下图所示:
1 __author__ = 'NL' 2 3 import sys 4 5 print(sys.getfilesystemencoding()) 6 print(sys.getdefaultencoding()) 7 8 str = "编码测试" #python3中,默认编码格式为unicode 9 print(str) 10 11 str_gbk = str.encode("gbk") #编码的同时,将string转成bytes 12 str_decode = str_gbk.decode("gbk") #解码的同时,将bytes转成string 13 print(str_gbk) #输出结果:b'\xb1\xe0\xc2\xeb\xb2\xe2\xca\xd4' 14 print(str_decode)
View Code
二、函数
1、函数的基本定义
__author__ = 'NL' def func1(): #不带参数的函数,无返回值,---》过程print("func1")def func2(): #不带参数的函数,有返回值,---》函数print("func1")return 0func1() #函数调用 func2() print(func1()) #返回值为None print(func2()) #返回值为0
2、带参数的函数
1 __author__ = 'NL' 2 3 def func1(x,y): 4 z = x + y 5 return z 6 7 def func2(*args): 8 return args 9 10 def func3(**kwargs): 11 return kwargs 12 13 def func4(x,y=3,*args,**kwargs): 14 return x,y,args,kwargs 15 16 print(func1(3,4)) #结果为7 17 print(func2(1,"haha",[1,5,"kkkte"])) #结果为tuple:(1, 'haha', [1, 5, 'kkkte']) 18 print(func3(name="nl",age=22,sex="M")) #结果为dict:{'name': 'nl', 'age': 22, 'sex': 'M'} 19 print(func4(4,9,"nihao",[1,2,3],name="wqx")) #结果为:(4, 9, ('nihao', [1, 2, 3]), {'name': 'wqx'})
关键参数
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
递归函数
代码演示,二分查找:
1 __author__ = 'NL' 2 3 date = [1,2,4,5,7,8,11,12,13,14,15,16,17,18,19,23,36,39,45,66,67,89,203.343] 4 5 def binary_search(date_set,num): 6 mid = int(len(date_set) / 2) 7 if len(date_set)> 1: 8 if num == date_set[mid]: 9 print("找到这个数字了") 10 elif num > date_set[mid]: 11 print("要找的数字在右边,现在从{}开始向右查找".format(mid)) 12 binary_search(date_set[mid:],num) 13 else: 14 print("要找的数字在左边,现在从{}开始向左查找".format(mid)) 15 binary_search(date_set[:mid],num) 16 elif len(date_set) == 1: 17 if num == date_set[0]: 18 print("找到这个数字了") 19 else: 20 print("没有找到这个数字") 21 22 binary_search(date,66)
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
转载于:https://www.cnblogs.com/zilin-2017/p/7067888.html
python基础知识(day3)相关推荐
- Python基础知识梳理(一)
Python基础知识梳理: 转载于:https://blog.51cto.com/10412806/2095116
- python基础知识资料-Python基础知识汇总
原标题:Python基础知识汇总 1.Anaconda的安装 百度Anaconda的官网,下载左边的Python3.X版本 然后是设置路径,最后给出Jupyter notebook.具体参考: 猴子: ...
- python基础知识资料-Python基础知识梳理 - 第02部分
本文是Python基础知识的第二篇, 主要是对内置对象类型的介绍, 涉及的类型如下表. 数字类型 在Python中, 数字并不是一个真正的对象类型, 而是一组类似类型的分类, 如整数和浮点数, 复数等 ...
- python语法基础知识总结-Python基础知识梳理 - 第01部分
在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等 ...
- python笔记基础-Python基础知识
Python基础知识 安装Python mac 通过命令行brew install python3 或者下载对应版本安装包安装 linux 通过包管理器安装apt-get install python ...
- python基本语法规则-python基础知识——基本语法
在python基础知识这个系列中,准备罗列出我学习python的一些基础知识,包括:基本语法 控制语句 内置数据结构 模块和函数 字符串 文件处理 面向对象 异常处理 以前写机器学习算法喜欢使用Mat ...
- python基础知识整理-python爬虫基础知识点整理
首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...
- python语言的单行注释以井号开头_推荐|零基础学习Python基础知识
原标题:推荐|零基础学习Python基础知识 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python具有丰富和强大的库,又被称为胶水语言.能把其他 ...
- 8、python基础知识-用户输入
#!/usr/bin/env python # _*_ coding: utf-8 _*_ num = 100 name = input("your name:") age = i ...
- python的django介绍_【Python基础知识】Django框架简介
很多初学Python的小伙伴不知道该从何开始学起,其实零基础学习的话可以先学习一些Python基础知识,等基础打牢之后再去接触更加深入的技术,接下来小编就为大家简单介绍一下有关于 Django框架内容 ...
最新文章
- Android UI体验之全屏沉浸式透明状态栏效果
- Springboot解决IDEA读取properties配置文件的中文乱码问题
- javascript中涉及到汉字的比较
- spring mvc 返回html 乱码,解决springmvc使用ResponseBody注解返回json中文乱码问题
- Wordpress婚庆婚纱摄影工作室企业网站主题模板
- bash 历史记录_您将实际使用的7个Bash历史记录快捷方式
- [Swift]LeetCode288. 唯一单词缩写 $ Unique Word Abbreviation
- ASP.NET编译和部署模型
- js中出现missing ) after argument list
- C#中pdf转word
- android手机常用浏览器,Android手机 三大浏览器对比评测
- 基于Proteus仿真8253音乐发生器
- Audio Hijack Pro 3.7.4 录制应用程序内播放的声音
- 『工程项目实践』表格识别 — V2.0
- 攻防世界web新手题解题writeup
- 利用CompletableFuture集齐7龙珠
- UG NX 10 控制基准平面的显示大小
- 跟卖亚马逊跨境电子商务ERP
- 微信运营|如何利用微信后台数据优化微信运营
- IT产品是计算机类产品吗,IT产品是什么
热门文章
- 斑斓中国BlenderCN项目库
- Servlet 4.0 入门
- 页面中,通过css设置文本不能被选中
- Ubuntu设置终端相对短路径
- 洛谷P5300 与或和(全1子矩阵/单调栈)
- Caused by: java.lang.NumberFormatException: For input string: 18446744073709551615
- pptp,l2tp获取登录用户信息用pppd参数即可
- FZU 2195 检查站点
- 模板 n维矩阵的二分幂
- 千山独行-一个人的创业路(连载八)