Một chút về Python
Python dùng indent để đánh dấu đó là một block code nếu chúng cùng indentation, ruby sử thì sử dụng {} hoặc từ khóa do ... end if 1 > 2: print("1 is greater than 2") elif 2 > 1: print("1 is not greater than 2") else: print("1 is equal to 2") Biểu thức điều kiện của Python không ...
Python dùng indent để đánh dấu đó là một block code nếu chúng cùng indentation, ruby sử thì sử dụng {} hoặc từ khóa do ... end
if 1 > 2: print("1 is greater than 2") elif 2 > 1: print("1 is not greater than 2") else: print("1 is equal to 2")
Biểu thức điều kiện của Python không giống với ruby nó kết thúc với dấu : đối với ruby biểu thức như sau
if true puts “Hello Ruby If”
Ruby dùng câu lệnh puts để in ra màn hình chứ không dùng print Looping / Iterator
loop_condition = True while loop_condition: print("Loop Condition keeps: %s" %(loop_condition)) loop_condition = False
for i in range(1, 11): print(i)
List: Collection | Array | Data Structure Array và list trong Python có thể lưu trữ bất kỳ một kiểu dữ liệu nào, có thể lặp qua các phần tử của List hoặc array hầu như chúng không có sự khác biệt nhiều, điểm khác biệt chính đó là phương thức thực thi List or Array ví dụ bạn có thể dùng phép chia đối với Array nhưng với List thì Python sẽ báo lỗi Array:
x = array([3, 6, 9, 12]) x/3.0 print(x)
List:
y = [3, 6, 9, 12] y/3.0 print(y)
Để sử dụng được Array thì bạn phải thêm import array và khai báo khi sử dụng nó array Nhưng với list thì không (List của Python khai báo giống với Array của ruby) Có một lưu ý đó là việc sử dụng Array của Python nhanh hơn và hiệu quả hơn đối với việc dùng List nếu bạn lưu trữ data với số lượng lớn.
my_integers = [5, 7, 1, 3, 4] print(my_integers[0]) # 5
Data Structure
dictionary_example = { "key1": "value1", "key2": "value2", "key3": "value3" }
Key là index trỏ vào value Truy cập vào Data Structure value :
dictionary_example[“value1”]
Nó tương tự với Hash trong ruby cả về khai báo và cách truy cập vào giá trị Để lặp qua data structure của Python ta có thể dùng các cách khác nhau
dictionary = { "some_key": "some_value" } for key in dictionary: print("%s --> %s" %(key, dictionary[key])) # some_key --> some_value
Ta cũng có thể dùng cách khác thông qua method items
for attribute, value in dictionary.items(): print("My %s is %s" %(attribute, value))
Python là ngôn ngữ lập trình hướng đối tượng, nó có class và object như những ngôn ngữ khác Khai báo một class trong Python
class Vehicle: pass
car = Vehicle() print(car) # <__main__.Vehicle instance at 0x7fb1de6c2638>
car là một instance hay một object của class Vehicle
Định nghĩa hàm khởi tạo hay các phương thức bên trong class
class Vehicle: def __init__(self, number_of_wheels): self.number_of_wheels = number_of_wheels def number_of_wheels(self): return self.number_of_wheels
car = Vehicle(4) car.number_of_wheels #4
Khai báo và sử dụng hàm khởi tạo cũng có chút khác với Ruby
class Vehicle def initialize(number_of_wheels) self.number_of_wheels =number_of_wheels end end
car = Vehicle.new(4) ca.number_of_wheels #4
class P: def __init__(self,x): self.x = x @property def x(self): return self.__x @x.setter def x(self, x): self.__x = x
Python sử dụng @property, @var.setter để lấy và gán giá trị cho attributes Cũng có một cách khác để get và set value cho attributes
class P: def __init__(self,x): self.__set_x(x) def __get_x(self): return self.__x def __set_x(self, x): self.__x = x x = property(__get_x, __set_x)
Khác với Python ruby cũng có syntax riêng
#getter def baz @baz end #setter def baz=(value) @baz = value end
Một cách khác nữa là sử dụng
attributes_accessible :baz #or attributes_accessor: baz
lúc này getter và setter sẽ được định nghĩa một cách tự động
Ta có thể khởi tạo các biến instance public bên trong hàm khởi tạo hoặc trong class Đưa giá trị của biến vào tham số của hàm khởi tạo
class Person: def __init__(self, first_name): self.first_name = first_name
tk = Person('TK') print(tk.first_name) # => TK
Tạo public instance variable bên trong class
class Person: first_name = 'TK'
Như thế này thì mọi instance variable của class Person đều có giá trị khởi tạo giống nhau TK
Cũng giống như public instance variable ta có thể khởi tạo biến Non-public instance variable bên trong hàm khởi tạo hoặc bên trong class. Nhưng chúng có sự khác nhau về mặt syntax
Non-public instance variable sử dụng dấu _ khai báo một biến non-public
class Person: def __init__(self, first_name, email): self.first_name = first_name self._email = email
tk = Person('TK', 'tk@mail.com') print(tk._email) # tk@mail.com
Ta cũng có thể thay đổi được giá trị của non-public variable thông qua method
class Person: def __init__(self, first_name, email): self.first_name = first_name self._email = email def update_email(self, new_email): self._email = new_email def email(self): return self._email
tk = Person('TK', 'tk@mail.com') print(tk.email()) # => tk@mail.com tk._email = 'new_tk@mail.com' #gán trực tiếp giá trị mới cho non-public variable nhưng không thay đổi được giá trị của nó print(tk.email()) # => tk@mail.com tk.update_email('new_tk@mail.com') #thông qua method update_email ta đã thay đổi được giá trị của nó print(tk.email()) # => new_tk@mail.com
class Person: def __init__(self, first_name, age): self.first_name = first_name self._age = age def show_age(self): return self._age
các public method có thể được sử dụng bên ngoài class
tk = Person('TK', 25) print(tk.show_age()) # => 25
Đối với non-public method cũng có syntax giống với non-public variable đó là phải sử dụng _ trước tên biến hoặc method
class Person: def __init__(self, first_name, age): self.first_name = first_name self._age = age def _show_age(self): return self._age
Non-public method chỉ có thể sử dụng bên trong class định nghĩa nó nhưng ta cũng có thể treat để sử dụng được ở bên ngoài thông qua public method
class Person: def __init__(self, first_name, age): self.first_name = first_name self._age = age def show_age(self): return self._get_age() def _get_age(self): return self._age tk = Person('TK', 25) print(tk.show_age()) # => 25
_get_agenon-public đã được gọi thông qua hàm public show_age
Nguồn tham khảo
https://www.python-course.eu/python3_properties.php
https://www.pythoncentral.io/the-difference-between-a-list-and-an-array/
https://medium.com/the-renaissance-developer/learning-python-from-zero-to-hero-8ceed48486d5