1. python中多个函数或者类定义可以放在一个.py 文件中,视为一个模块。模块的.py文件中,一般要写 if __name__ == '__mian__' 用来单独执行该模块内的某些函数。

2. python多个模块放在同一个文件夹中,并在文件夹中新建一个 __init__.py 文件,则该文件夹就可以形成一个包。__init__.py 文件就是告诉python解释器该文件夹为一个包,__init__.py 中内容可以为空。

3. 在python文件中可以import某个包,某个包中得某个模块,某个模块,某个模块中的某个类或者函数,比如;

import pack1
#这样在使用pack1中的模块或者其他东西,需要在模块名前写明 pack1 import pack1.module1
#在使用module1时,需要写pack1.module1.xxx import module1 from pack1
#这样,在使用module1时,可以不用写pack1,只写 module1.xxx import module1.classA
#在使用classA的时候,需要写明 module1.classA import classA from module1
#使用classA的时候,只需要 classA import module1.func1
#使用func1的时候,需要写 module1.func1 import func1 from module1
#使用func1的时候,只需要写 func1 ####注意,以上都是默认命名空间不会发生冲突,即不会出现这种情况:
# module1和module2中都有classA,且同时 import classA from module1, import classA from #module2,因为这样会出现冲突

4. python程序执行的时候,包和模块的搜索路径为:

(1)当前文件夹

(2)系统变量PYTHONPAHTH 定义的路径

(3)python标准库的安装路径

5. python函数传递参数的方式可以有如下几种方式:

(1)位置传递参数

即传递进去的参数顺序和函数定义的顺序一致,如果有默认参数,则默认参数要放在最后的位置

(2)关键字传递参数

即调用函数的时候,写明 func(arg1 = real_arg1, arg2 = real_arg2..),即形参和实参明确对应,此时,实际参数的顺序就不必按照函数定义时的参数顺序来写。

位置传递参数和关键字传递参数可以混用,但是位置传递的参数需要放在关键字传递的参数之前,比如 func(real_arg1, arg2 = real_args, arg3 = real_arg3....)

(3)包裹传递

类似c语言的非定项参数,有两种传递方式,

(1)通过元组来传递,函数的定义为:

def func(*args):

  xxxx

实际调用的时候:

func(1,2,3,4) #1,2,3,4自动包装成了一个元组

(2)通过字典来传递,函数定义为:

def func(**args):

  xxxx

实际调用的时候:

func(a='hello' , b = 'world', c = 123) #参数自动封装成了一个字典 {'a':'hello', 'b':'world', 'c':123}

(4)解包裹传递

若函数定义的时候的参数为多个,而我们想要将一个元组或者一个字典的各个元素分别作为函数的多个参数,则将元组或者字典作为参数传给函数的时候,可以:

def func(a, b, c):

  xxx

调用的时候:

t = (1,2,3)

func(t)

t2 = {'a':1, 'b':23, 'c':'hello world'}

func(t2)  #将字典的键值对分别作为各个参数

在定义或者调用参数时,参数的几种传递方式可以混合。但在过程中要小心前后顺序。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字,并且根据上面所说的原理细细分辨。

注意:请注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。

6. 数组、列表、元组的遍历

(1)range(start, end, step) 自动生成一个列表,范围为 [start, end), 间隔为step, 注意区间为左闭右开。

(2)enumerate(x) #x为列表或者元组,对于每次迭代,返回 index, value 元组,index为下标,而value为x内的下标为index的对应的数值

for (index, value) in enumerate(x):

  print index, value

(3)zip(x1, x2...)

如果有多个列表x1,x2.... 每个序列的元素个数相同,可以通过zip来迭代取出所有序列的相同位置的元素。

ta = [1,2,3]
tb = [9,8,7]
tc = ['a','b','c']
for (a,b,c) in zip(ta,tb,tc):
print(a,b,c)

7. python的函数修饰符

函数修饰符是一种类型的函数,它以一个函数为参数,并返回一个可调用的对象,该可调用对象对参数的函数进行封装。常常在函数定义前 写明 @ 修饰符,比如

先定义一个修饰符 decorator1,

def decorator1(f):
  def _real_exe_func_():
    print '..........'  
    f() #调用参数中的函数f
  return _real_exe_func_ #返回一个可调用对象,而不是 _real_exe_func_() 执行函数 @decorator1 #使用修饰符修饰func1,实际效果等同于 func1 = decorator1(func1)
def func1():
  print 'in func1' func1() #调用func1的结果为,
.......
in func1

如果被修饰的各个函数有不同的参数,则可以这样做:

#func1 和 func2 函数的参数不同,现在要用同一个装饰器来修饰他们
def func1( lst1, lst2 ):
# 合并两个list,并打印各项
for item in lst1+lst2:
print item def func2( dic ):
# 循环dict,打印各key-value
for k, v in dic.items():
print k, v import sys
import traceback
def de( f ):
def _call( *args, **kwargs ):
try:
return f( *args , **kwargs )
except:
print 'param type error'
return _call
@de
def func1( lst1, lst2 ):
for item in lst1+lst2:
print item
@de
def func2( dic ):
for k, v in dic.items():
print k, v
if name = '__main__':
func1( [1,2], [3,4] )
func2( [1,2] )

8.python的类中变量、函数的特殊命名--意义

(1) _xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以一个下划线开头的对象引入。

(2) __xx 双下划线的表示的是私有类型的变量。只能允许这个类本身进行访问了,连子类也不可以用于命名一个类属性(类变量),调用时名字被改变(在类FooBar内部,__boo变成_FooBar__boo,如self._FooBar__boo)

(3) __xx__定义的是特列方法。用户控制的命名空间内的变量或是属性,如__init__ , __import__

或是__file__ 。只有当文档有说明时使用,不要自己定义这类变量。 (就是说这些是python内部定义的变量名)

9. python 使用@property

面向对象的语言几乎都会注重类的封装,比如get和set一个类中的成员变量,为了保证封装性,都会在类中定义针对该变量的get和set方法,这样在外部必须调用get和set方法才可以对变量进行获取和设置。而无法直接使用 对象名.变量名 的形式来对变量进行获取和赋值。在python中可以通过@property 和 @变量名.setter 装饰器来修饰 变量的get和set方法,这样在外部获取和设置对象中的变量的时候,就可以直接使用对象名.变量名的形式。

class Student(object):

    def get_score(self):
return self._score #_score, protected variable def set_score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value s = Student()
s.get_score()
s.set_score(10) 通过@property和 @score.setter的修饰如下:
class Student(object): @property
def score(self):
return self._score @score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('score must be an integer!')
if value < 0 or value > 100:
raise ValueError('score must between 0 ~ 100!')
self._score = value s = Student()
s.score
s.score = 100

python语法笔记(一)的更多相关文章

  1. python语法笔记(四)

    1.对象的属性     python一切皆对象,每个对象都可能有多个属性.python的属性有一套统一的管理方案. 属性的__dict__系统     对象的属性可能来自于其类定义,叫做类属性:还可能 ...

  2. python语法笔记(三)

    1. 动态类型 python的变量不需要声明,在赋值时,变量可以赋值为任意的值.这和Python的动态类型语言相关. python对象是存在于内存中的实体,代码中写对象名,只是指向该对象的引用.引用和 ...

  3. python语法笔记(二)

    1. 循环对象 循环对象是一类特殊的对象,它包含一个next()方法(在python3中是 __next__()方法),该方法的目的是进行到下一个结果,而在结束一系列结果之后,举出 StopItera ...

  4. Python 语法笔记

    1.else与while结合 while a>0: pass else: pass #当a<=0时执行 2.with语法,无需关闭文件,python自动关闭 with open('a.tx ...

  5. python语法笔记(七)

    python标准库 Python有一套很有用的标准库(standard library).标准库会随着Python解释器,一起安装在你的电脑中的.它是Python的一个组成部分.这些标准库是Pytho ...

  6. python语法笔记(六)

    1.序列的方法     python中序列包含列表list.元组tuple.字符串str. 可以用于序列(表.元组.字符串)的内建函数: len(s) 返回: 序列中包含元素的个数 min(s) 返回 ...

  7. python语法笔记(五)

    1.python内存管理 (1)对象内存使用 &nsbp;&nsbp;&nsbp;&nsbp;在python中通过执行内建函数 id(obj) 可以获得对象obj在内存 ...

  8. python 语法笔记(一)

    #python3里面input默认接收到的事str类型,而python2里面却认为是int类型n=int(input('请输入想要第几个数')) #如果将int省去,python3中该程序将会报错a, ...

  9. python 笔记2:python语法基础

    python语法学习笔记: 1 输入输出 input(),print(). name = input('input your name : ')print('hello ,'+name)print(& ...

随机推荐

  1. Bootstrap——Jumbotron编写

    <div class="jumbotron">        <h1>Navbar example</h1>        <p>T ...

  2. 一个Public的字段引起的,谈谈继承中的new

    一直觉得对c#面向对象这块已经掌握的很好了,因为正常情况下字段一般我们设计成私有的,今天突然想到一个实验,如下有两个很简单的类: public class Farther { ; public vir ...

  3. iOS深入学习(UITableView系列2:reloadData)

    接着前一篇的博客来深入学习UITableView, UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@&q ...

  4. Java获取音频文件(MP3)的播放时长

    最近的一个项目需要按照时间播放mp3文件,例如,播放10分钟的不同音乐. 这就意味着我得事先知道mp3文件的播放时长,以决定播放几遍这个文件. 方案一:Java的方式 找第三方的库,真的感谢这些提供j ...

  5. Creating HTML table with vertically oriented text as table header 表头文字方向

    AS an old question, this is more like info or reminder about vertical margin or padding in % that ta ...

  6. Django 过滤器 实例

    实例1 safe让Html标签以及一些特殊符号(如<)生效,下面以例子说明: # value = '<b>CPT</b>' # 那么输出的时候,CPT就是加粗的,如果不加 ...

  7. struts2——通配符

    struts2的配置文件是 struts.xml.. 在这个配置文件里面可以使用通配符..其中的好处就是,大大减少了配置文件的内容..当然,相应付出的代价是可读性.. 使用通配符的原则是 约定高于配置 ...

  8. C# WPF MVVM 实战 – 4 - 善用 IValueConverter

    IValueConverter,做 WPF 的都应该接触过,把值换成 Visibility .Margin 等等是最常见的例子,也有很多很好的博文解释过用法.本文只是解释一下,MVVM 中一些情景. ...

  9. FZU 2214 Knapsack problem(背包问题)

    Description 题目描述 Given a set of n items, each with a weight w[i] and a value v[i], determine a way t ...

  10. kafka单节点部署无法访问问题解决

    场景:在笔记本安装了一台虚拟机, 在本地的虚拟机上部署了一个kafka服务: 写了一个测试程序,在笔记本上运行测试程序,访问虚拟机上的kafka,报如下异常: 2015-01-15 09:33:26 ...