自学python之路1——python基础
在廖雪峰的官方网站学习python,以下是python基础与函数两个模块的学习笔记,内容基本是引用上面的内容。第一篇博客非常乱,整理得不是很好。
- 1.输出
python:print(‘a%d%s’%(2,'3')
c++:printf("a%d%s",2,'3')
- 2.list相当于数组,但声明方法有区别:
[code]classmates = ['Michael', 'Bob', 'Tracy']
len(classmates)可以得到长度。classmates【0】(或其他数字)可以访问list中每个位置的元素。
append,insert,pop等可以直接用(类似于c中stl里的用法)
如果要取最后一个元素,除了计算索引位置外,还可以用
-1做索引,直接获取最后一个元素:
[code]>>> classmates[-1]
与C的区别:
1.如果要取最后一个元素,除了计算索引位置外,还可以用
-1做索引,直接获取最后一个元素:
[code]>>> classmates[-1]
2.tuple:元组,一旦初始化就不能更改。它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用
classmates[0],
classmates[-1],但不能赋值成另外的元素。
需要注意的是:
要定义一个只有1个元素的tuple,如果你这么定义:
[code]>>> t = (1) >>> t 1
定义的不是tuple,是
1这个数!这是因为括号
()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是
1。
所以,只有1个元素的tuple定义时必须加一个逗号
,,来消除歧义:
[code]>>> t = (1,) >>> t (1,)
Python在显示只有1个元素的tuple时,也会加一个逗号
,,以免你误解成数学计算意义上的括号。
三。条件判断
逻辑与c++类似,写法有区别
[code]age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid')
1.if后无括号,2.elif写法不同。3.if后面要加冒号
四。循环
1.for 循环
[code]sum = 0 for x in range(101): sum = sum + x print(sum)
对list里面每个元素都进行了操作,写法上比c++节省了很多。
还可以用函数range(x)来获取0-x的整数
上题结果为5050
2.while循环:
[code]n = 1 while n <= 100: print(n) n = n + 1 print('END')
与if一样无括号,后门要加冒号。
循环中break与continue用法与c++一样。
五.dict&set
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:
[code]>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95
dict的key必须是不可变对象。
set:set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。
不可变对象:比如list
六函数
python函数库:https://docs.python.org/3/library/functions.html#abs
1.函数的定义
在Python中,定义一个函数要使用
def语句,依次写出函数名、括号、括号中的参数和冒号
:,然后,在缩进块中编写函数体,函数的返回值用
return语句返回。
写习惯了c++书写python有些小错误:
def my_abs(x):
if x >= 0:
return x
else:
return -x
def my_abs(x):
if x>=0:
return x;
else
return -x;
下面是自己写的错误代码:首先python不像c++,需要每行都加分号。然后else后门面也要有冒号。最后,因为python里面没有用{}来框住,所以必须保证缩进正确,否则会报错。
将上述代码保存为py文件后,在该文件的当前目录下启动Python解释器。(在我的电脑就是E:\Users\博伟\Desktop\PY文件>python)。然后导入函数就可以用啦
>>> from my_abs import my_abs
>>> my_abs(-9)
9
空函数(不知道有啥用,先码下来)
如果想定义一个什么事也不做的空函数,可以用
pass语句:
[code]def nop(): pass
pass语句什么都不做,那有什么用?实际上
pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个
pass,让代码能运行起来。
pass还可以用在其他语句里,比如:
[code]if age >= 18: pass
缺少了
pass,代码运行就会有语法错误。
参数检查
1.参数个数不对,Python解释器会自动检查出来,并抛出
TypeError:
[code]>>> my_abs(1, 2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: my_abs() takes 1 positional argument but 2 were given
2.类型错误
[code]>>> my_abs('A') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in my_abs TypeError: bad operand type
不过abs函数内要加上类型检查否则检测不出来。python的参数不需要带类型,所以要在函数内部判断参数类型是否错误。。这个报错居然是要自己写的。
[code]def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
python的函数可以返回多个变量,其原理其实是返回了一个tuple
参数:
1.默认参数:
[code]def power(x, n=2): s = 1 while n > 0: n = n - 1 s = s * x return s
窝滴c也有啦。
定义默认参数要牢记一点:默认参数必须指向不变对象!
比如不能L=[],要L=none 可以看廖雪峰的例子。
2.可变参数
这个比c可以说方便很多。
*nums表示把
nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。
[code]def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
[code]>>> calc(1, 2) 5 >>> calc() 0
3.关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
[code]def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw)
[code]>>> person('Bob', 35, city='Beijing') name: Bob age: 35 other: {'city': 'Beijing'} >>> person('Adam', 45, gender='M', job='Engineer') name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
命名关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过
kw检查。
使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个
*作为特殊分隔符。如果缺少
*,Python解释器将无法识别位置参数和命名关键字参数
参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
[code]def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
一个星号是list全部元素放进args 两个星号是传入字典啊
在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。
[code]>>> f1(1, 2) a = 1 b = 2 c = 0 args = () kw = {} >>> f1(1, 2, c=3) a = 1 b = 2 c = 3 args = () kw = {} >>> f1(1, 2, 3, 'a', 'b') a = 1 b = 2 c = 3 args = ('a', 'b') kw = {} >>> f1(1, 2, 3, 'a', 'b', x=99) a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99} >>> f2(1, 2, d=99, ext=None) a = 1 b = 2 c = 0 d = 99 kw = {'ext': None}
最神奇的是通过一个tuple和dict,你也可以调用上述函数:
[code]>>> args = (1, 2, 3, 4) >>> kw = {'d': 99, 'x': '#'} >>> f1(*args, **kw) a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'} >>> args = (1, 2, 3) >>> kw = {'d': 88, 'x': '#'} >>> f2(*args, **kw) a = 1 b = 2 c = 3 d = 88 kw = {'x': '#'}
所以,对于任意函数,都可以通过类似
func(*args, **kw)的形式调用它,无论它的参数是如何定义的。
- python自学之路-基础篇(二)
- python自学之路-基础篇(三)
- python自学之路-基础语法
- python 自动化之路 day 面向对象基础
- Java自学之路-Java基础教程-35:Java的多线程类Runnable和主线程子线程
- python学习之路-day1-python基础1
- python3自学之路-笔记18_文件夹及文件相关的操作详解
- Java自学之路-Java基础教程-45:Java网络聊天基础之1-套接字类Socket与ServerSocket
- 开启自学python之路
- 自学Python之Python基础:(六)可迭代对象与反迭代技巧
- 自学Python之Python基础:(七)字符串处理技巧
- 自学Python之Python基础:(八)正则表达式
- python的自学之路
- python语言的自学之路3
- PHP 自学之路-----XML编程(Xpath技术,simpleXml技术)基础入门
- Python自学之路第四步——组织列表
- 自学Python3.1-函数基础
- python3自学之路-笔记11_常用的字符串操作详解
- Java自学之路-Java基础教程-9:Java的变量类型-8种基本类型和3种引用类型
- Python之路,Day3 - Python基础3